Pourquoi bash a besoin de && pour faire écho à une variable sur une ligne?

12

Pourquoi SOMETHING=1 && echo $SOMETHINGfaut-il &&revenir 1
Pourquoi ne SOMETHING=1 echo $SOMETHINGrevient pas1

Joel
la source
7
Honte à celui qui a rejeté votre question, surtout sans laisser de commentaires constructifs. C'est une question valide, et l'ordre dans lequel bash fait l'expansion des mots / paramètres / variables / tilde et l'exécution des commandes est délicat. Je te donne un +1.
Spiff
techniquement, "echo 1" renvoie 0, et la sortie est 1 ... c'est-à-dire "echo" sort avec le statut "0", et affiche pour stdout les arguments. Le phrasé "renvoie 1" pour moi impliquait "exit staus", pas "sorties", et était un peu déroutant à première vue.
michael

Réponses:

8

Parce que bash fait l'expansion des variables avant d'interpréter les instructions d'affectation des variables. Donc, puisque QUELQUE CHOSE n'a pas été défini précédemment, votre commande devient ...

SOMETHING=1 echo ''

… Puis exécuté.

Spiff
la source
L'expansion variable est-elle la même que la substitution variable?
Joel
1
@JoelL: Correct
Gordon Davisson
0

exporter et faire écho en même temps

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 autre exemple maladroit xD

root@kali:~# echo ${SOMETHING=1} ${PLUS=+} ${SUMTHIN=2} ${EQUALS==} && expr $SOMETHING $PLUS $SUMTHIN
1 + 2 =
3
root@kali:~# 
moonbutt74
la source