bash -c “v = значення; echo $ v ”нічого не відображає


9

Виконання наступного на екрані командного рядка:

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

нічого не відображає. Нічого страшного? Як я можу призначити значення змінній всередині цього виду виконання?


Відповіді:


18

Тут задіяні дві снаряди:

  • Оболонка виклику, інтерактивна оболонка, з якої ви це запустите

  • Неінтерактивна оболонка без входу, породжена користувачем 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

1

При подвійних лапках $vзамінюється інтерактивна оболонка. Використовуйте одинарні лапки:

$ bash -c 'v=value;echo $v'
value
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.