Dlaczego bash potrzebuje && do echa zmiennej w jednym wierszu?

12

Dlaczego SOMETHING=1 && echo $SOMETHINGmusi &&wrócić? 1
Dlaczego nie SOMETHING=1 echo $SOMETHINGzwraca?1

Joel
źródło
7
Wstydź się za to, kto głosował na twoje pytanie, szczególnie bez pozostawiania konstruktywnych opinii. To prawidłowe pytanie, a kolejność, w jakiej bash rozwija słowo / parametr / zmienną / tyldę i wykonywanie poleceń jest trudna. Daję ci +1.
Spiff
technicznie „echo 1” zwraca 0, a wynikiem jest 1…, co oznacza, że ​​„echo” wychodzi ze statusem „0” i wyświetla się, aby podać argumenty. Frazowanie „zwraca 1” oznaczało dla mnie „wyjście staus”, a nie „wyjście”, i na pierwszy rzut oka było trochę mylące.
Michael

Odpowiedzi:

8

Ponieważ bash dokonuje interpretacji zmiennych przed interpretacją instrukcji przypisania zmiennych. Ponieważ COŚ nie zostało wcześniej zdefiniowane, polecenie staje się…

SOMETHING=1 echo ''

… Następnie zostaje stracony.

Spiff
źródło
Czy rozszerzenie zmiennej jest takie samo jak podstawienie zmiennej?
Joel
1
@Jelel: Poprawnie
Gordon Davisson
0

eksport i echo w tym samym czasie

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:~# 

Kolejny lepszy przykład xD

root@kali:~# echo ${SOMETHING=1} ${PLUS=+} ${SUMTHIN=2} ${EQUALS==} && expr $SOMETHING $PLUS $SUMTHIN
1 + 2 =
3
root@kali:~# 
moonbutt74
źródło