Выполнение следующего из экрана командной строки:
bash -c "v=value; echo $v"
ничего не отображает. Все нормально? Как я могу присвоить значение переменной внутри этого вида выполнения?
Существует две оболочки, включенные здесь:
оболочка вызова, интерактивная оболочка, от которой Вы выполняете это
невход в систему, неинтерактивная оболочка, порожденная bash -c
Теперь, проблема, в двойных кавычках, переменные расширены до своих соответствующих значений, это верно для любой оболочки.
Так, поскольку Вы использовали двойные кавычки, переменное расширение, $v
, на самом деле происходит в оболочке вызова, не названной оболочке. Но объявление, v=value
, происходит на названной неинтерактивной оболочке.
Так, всего, Вам определили переменную в названной оболочке и расширенный (заранее) в оболочке вызова. Поскольку переменная значения сброшена в оболочке вызова, следовательно Вы ничего не получаете в выводе.
Теперь, для создания определения переменной и расширения для происхождения в порожденной оболочке, одинарных кавычках использования или выходят $
:
$ bash -c "v=value; echo $v"
$ bash -c 'v=value; echo $v'
value
$ bash -c "v=value; echo \$v"
value
С двойными кавычками $v
заменен интерактивной оболочкой. Используйте одинарные кавычки:
$ bash -c 'v=value;echo $v'
value