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


12

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


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.


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:~# 
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.