От man bash
:
A simple command is a sequence of optional variable assignments followed by blank-separated words and redirections, and terminated by a control operator. The first word specifies the command to be executed, and is passed as argument zero. The remaining words are passed as arguments to the invoked command.
Таким образом, совершенно законно записать:
foo=bar echo $foo
но это не работает, как я ожидаю (это печатает просто новую строку). Это довольно странно для меня с тех пор:
$ foo=bar printenv
foo=bar
TERM=rxvt-unicode
[...]
Кто-то мог объяснить меня, где я делаю неправильно?
Если Вы делаете foo=bar
и echo $foo
на одной строке это не будет работать. Необходимо будет сделать одну из трех вещей.
Выполните их как отдельные команды. т.е.: foo=bar
Войти echo $foo
Выполните их на одной строке, но с точкой с запятой между двумя. т.е.: foo=bar; echo $foo
То же как № 2, но с двойными амперсандами. т.е.: foo=bar && echo $foo
Различие между 2 и 3 - то, что 3 только выполнится echo $foo
если foo=bar
следовавший.
Попытка:
foo=bar; echo $foo
^
Следите ;
так как Вы пытаетесь соответствовать двум отдельным командам на одной строке. Они не сотрудничают по умолчанию.