Чому bash потрібно &&, щоб повторити змінну в одному рядку?


12

Чому SOMETHING=1 && echo $SOMETHINGпотрібно &&повертатися 1
Чому не SOMETHING=1 echo $SOMETHINGповертається1


7
Не соромтеся того, хто поставив проти себе питання, особливо не залишаючи конструктивних відгуків. Це дійсне питання, і порядок, у якому bash виконує розширення word / parameter / змінний / tilde та виконання команд, є складним. Я даю вам +1.
Spiff


технічно "ехо 1" повертає 0, а вихід 1 ... тобто "ехо" виходить зі статусом "0" і відображається для стягування аргументів. Фраза «повертає 1» для мене передбачала «вихід стаус», а не «вихід», і на перший погляд була трохи заплутаною.
Майкл

Відповіді:


8

Тому що bash робить розширення змінної перед інтерпретацією операторів призначення змінних. Отже, оскільки SOMETHING раніше не був визначений, ваша команда стає…

SOMETHING=1 echo ''

… Потім виконується стратою.


Чи розширення змінної збігається з підстановкою змінної?
Джоель

1
@JoelL: Правильно
Гордон Девіссон

0

експорт і відлуння одночасно

root@kali:~# echo ${SOMETHING=1}
1
root@kali:~# echo $SOMETHING
1
root@kali:~# unset SOMETHING
root@kali:~# echo $SOMETHING

root@kali:~# echo ${SOMETHING=1}
1
root@kali:~# 

Інший приклад гуфінгу xD

root@kali:~# echo ${SOMETHING=1} ${PLUS=+} ${SUMTHIN=2} ${EQUALS==} && expr $SOMETHING $PLUS $SUMTHIN
1 + 2 =
3
root@kali:~# 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.