Mengapa bash perlu && untuk menggemakan variabel pada satu baris?

12

Mengapa SOMETHING=1 && echo $SOMETHINGharus &&kembali 1
Mengapa tidak SOMETHING=1 echo $SOMETHINGkembali1

Joel
sumber
7
Malu pada siapa pun yang menurunkan pertanyaan Anda, terutama tanpa meninggalkan umpan balik yang membangun. Ini pertanyaan yang valid, dan urutan bash melakukan ekspansi kata / parameter / variabel / tilde dan eksekusi perintah rumit. Saya memberi Anda +1.
Spiff
secara teknis, "echo 1" mengembalikan 0, dan outputnya adalah 1 ... artinya, "echo" keluar dengan status "0", dan ditampilkan untuk menyelesaikan argumen. Ungkapan "mengembalikan 1" kepada saya menyiratkan "jalan keluar", bukan "keluaran", dan sedikit membingungkan pada pandangan pertama.
Michael

Jawaban:

8

Karena bash melakukan ekspansi variabel sebelum menafsirkan pernyataan penugasan variabel. Jadi, karena SESUATU tidak didefinisikan sebelumnya, perintah Anda menjadi ...

SOMETHING=1 echo ''

... lalu dieksekusi.

Spiff
sumber
Apakah ekspansi variabel sama dengan substitusi variabel?
Joel
1
@ JoelL: Benar
Gordon Davisson
0

ekspor dan gema pada saat yang sama

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

Contoh goofier lain xD

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