Виконання наступного на екрані командного рядка:
bash -c "v=value; echo $v"
нічого не відображає. Нічого страшного? Як я можу призначити значення змінній всередині цього виду виконання?
Виконання наступного на екрані командного рядка:
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