В справочной странице bash 4.1 указано:(выделено мной)...
Простые команды
Простая команда:последовательность необязательных назначений переменных, за которыми следуют слова, разделенные пробеламии перенаправления, и завершается оператором управления. Первыйсловоуказывает команду, которая должна быть выполнена, и передается как аргумент ноль. Остальные слова передаются как аргументы вызываемой команде.
Проверка версии в моей системе(НЕ исправлено для контузии)...
# bash --version
GNU bash, version 4.1.0(1)-release (i686-pc-linux-gnu) ...
Однако предшествующее назначение переменных без точек с запятой должно быть способом локализации значений переменных среды только на период выполнения одного вызова команды, но, похоже, этого не происходит...
# x=123 echo $x; unset x; echo $x
bash: x: unbound variable
# x=123; echo $x; unset x; echo $x
123
bash: x: unbound variable
# x=123; echo $x | tr '1' 'a'; unset x; echo $x
a23
bash: x: unbound variable
# x=123 echo $x | tr '1' 'a'; unset x; echo $x
bash: x: unbound variable
bash: x: unbound variable
# x="123" echo "$x" | tr '1' 'a'; unset x; echo $x
bash: x: unbound variable
bash: x: unbound variable
# x="123"; echo "$x" | tr '1' 'a'; unset x; echo $x
a23
bash: x: unbound variable
Решение
Заэтот ответ на другой вопроспохоже, что команда должна намеренно использовать переменные окружения своего родителя и echo
не делает этого. Но вызовы оболочки типа bash -c
do ...
x=123 bash -c 'echo $x'; unset x; echo $x
123
bash: x: unbound variable
Ресурсы
решение1
Эта линия
x=123 echo $x
оценивается в следующем порядке:
$x
расширяется до значенияx
втекущийоболочка.- Значение
x
в среде выполняемой команды установлено равным 123 - В развернутой командной строке выполняется поиск команды и
echo
она находится. echo
запускается в среде, гдеx
установлено значение 123, и$1
устанавливается на то значение, котороеx
было указано на шаге 1.echo
выводит данные$1
на стандартный вывод, но в противном случае игнорирует другие значения в своей среде.
Обратите внимание, что $x
аргумент отделен от символа x
, который предшествует команде.