Perché bash ha bisogno di && per riecheggiare una variabile su una riga?


12

Perché SOMETHING=1 && echo $SOMETHINGdeve &&tornare 1
Perché non SOMETHING=1 echo $SOMETHINGritorna1


7
Peccato per chiunque abbia votato male alla tua domanda, soprattutto senza lasciare un feedback costruttivo. È una domanda valida e l'ordine in cui bash esegue l'espansione delle parole / parametri / variabili / tilde e l'esecuzione dei comandi è complicato. Ti sto dando un +1.
Spiff


tecnicamente, "echo 1" restituisce 0, e l'output è 1 ... vale a dire, "echo" esce con lo stato "0" e viene visualizzato per stdout degli argomenti. Il frase "restituisce 1" per me implicava "exit stateus", non "output", ed era un po 'confuso a prima vista.
michael

Risposte:


8

Perché bash fa l'espansione delle variabili prima di interpretare le istruzioni di assegnazione delle variabili. Quindi, poiché QUALCOSA non era stato precedentemente definito, il tuo comando diventa ...

SOMETHING=1 echo ''

... quindi viene eseguito.


L'espansione delle variabili è uguale alla sostituzione delle variabili?
Joel

1
@JoelL: Corretto
Gordon Davisson,

0

esportazione ed eco allo stesso tempo

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

Un altro esempio sciocco xD

root@kali:~# echo ${SOMETHING=1} ${PLUS=+} ${SUMTHIN=2} ${EQUALS==} && expr $SOMETHING $PLUS $SUMTHIN
1 + 2 =
3
root@kali:~# 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.