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