bash -c «v = значение; echo $ v ”ничего не отображает

9

Выполнение следующего из экрана командной строки:

bash -c "v=value; echo $v"

ничего не отображает. Все нормально? Как я могу присвоить значение переменной внутри этого вида выполнения?

Хосеп Колс
источник

Ответы:

18

Здесь задействованы две оболочки:

  • Вызывающая оболочка, интерактивная оболочка, из которой вы запускаете эту

  • Неинтерактивная, неинтерактивная оболочка, созданная bash -c

Теперь проблема в том, что в двойных кавычках переменные раскрываются до соответствующих значений, это верно для любой оболочки.

Таким образом, поскольку вы использовали двойные кавычки, раскрытие переменной $vфактически происходит в вызывающей оболочке, а не в вызываемой оболочке. Но объявление v=value, происходит в вызываемой неинтерактивной оболочке.

Итак, в итоге у вас есть переменная, определенная в вызываемой оболочке и расширенная (заранее) в вызывающей оболочке. Поскольку переменная значения не установлена ​​в вызывающей оболочке, следовательно, вы ничего не получите в выводе.

Теперь, чтобы определение переменной и ее раскрытие происходили в порожденной оболочке, используйте одинарные кавычки или escape $:

$ bash -c "v=value; echo $v"

$ bash -c 'v=value; echo $v'
value

$ bash -c "v=value; echo \$v"
value
heemayl
источник
1

С двойными кавычками $vподставляется интерактивная оболочка. Используйте одинарные кавычки:

$ bash -c 'v=value;echo $v'
value

источник