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

9

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

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

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

    
задан Josep Cols 14.06.2016 в 10:59
источник

2 ответа

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 14.06.2016 в 11:17
источник
1

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

$ bash -c 'v=value;echo $v'
value
    
ответ дан user448115 14.06.2016 в 11:05