Pseudonimy nie masz „środowisko”. Pseudonim jest po prostu "głupim" podstawieniem tekstu. W pytaniu zmienna środowiskowa nie jest używana - tylko zmienna powłoki. Jeśli chcesz korzystać ze środowiska, użyj funkcji. W tym przypadku nie ma korzyści dla aliasu nad funkcją.
$ alias foo='echo "$bar"'
$ bar=hi foo
Nie generuje wyników, ponieważ środowisko ustawione dla prostej komendy nie ma zastosowania do rozszerzeń.
$ alias foo=$'eval \'echo "$bar"\''
$ bar=hi foo
hi
Jeśli zamiast tego użyto funkcji, nie byłoby problemu.
$ foo() { echo "$bar"; }
$ bar=hi foo
hi
W razie wątpliwości należy zawsze korzystać z funkcji.
Edit
Technicznie, powyższe jest tylko bash. Wykonanie tego w pełni przenośny sposób jest prawie niemożliwe.
W desce rozdzielczej, mksh trybie POSIX, bash i inne powłoki POSIX można zrobić:
foo() { echo "$bar"; }
bar=hi command eval foo
Jednak to nie będzie działać w ksh93 lub zsh. (Zgłosiłem już błąd dla ksh93, ale nigdy nie można go naprawić.) W mksh i ksh93 powinieneś zdefiniować funkcje używając słowa kluczowego function
, ale to nie jest POSIX. Nie jestem świadomy żadnego rozwiązania, które będzie działać wszędzie.
Co gorsza, dodatkowe wyjątki są dodawane do POSIX 2008-TC1 tak, że sposób przyporządkowania środowisko pracy będzie jeszcze bardziej skomplikowana. Proponuję ich nie używać, chyba że naprawdę wiesz, co robisz.
Również badanie alias = 'echo \ $ bar' (tej samej idei, ekspansja jest tłumione) –
Poprawna odpowiedź, po prostu uważać aliasing' test', jest to rzeczywista komenda. – Kevin
'alias foo = 'echo" $ bar "". 'Eksportuj' jest niepotrzebny. – ormaaj