command-line - apa tujuannya &&
?
Di shell, ketika Anda melihat
$ command one && command two
maksudnya adalah untuk mengeksekusi perintah yang mengikuti &&
hanya jika perintah pertama berhasil. Ini idiomatis dari kerang Posix, dan tidak hanya ditemukan di Bash.
Ini bermaksud untuk mencegah jalannya proses kedua jika yang pertama gagal.
Anda mungkin memperhatikan bahwa saya telah menggunakan kata "niat" - itu untuk alasan yang bagus. Tidak semua program memiliki perilaku yang sama, jadi agar ini berfungsi, Anda perlu memahami apa yang dianggap sebagai "kegagalan" program dan bagaimana cara menanganinya dengan membaca dokumentasi dan, jika perlu, kode sumber.
Shell Anda menganggap nilai pengembalian 0 untuk true, angka positif lainnya untuk false
Pengembalian program a sinyal saat keluar. Mereka harus mengembalikan 0 jika berhasil keluar, atau lebih besar dari nol jika tidak. Ini memungkinkan sejumlah komunikasi antara proses.
Ini &&
disebut sebagai AND_IF
dalam tata bahasa shell posix , yang merupakan bagian dari and_or
daftar perintah, yang juga termasuk||
yang merupakan OR_IF
dengan semantik serupa.
Simbol tata bahasa, dikutip dari dokumentasi:
%token AND_IF OR_IF DSEMI
/* '&&' '||' ';;' */
Dan Tata Bahasa (juga dikutip dari dokumentasi), yang menunjukkan bahwa sejumlah AND_IF
s ( &&
) dan / atau OR_IF
s ( ||
) dapat dirangkai (seperti and_or
yang didefinisikan secara rekursif):
and_or : pipeline
| and_or AND_IF linebreak pipeline
| and_or OR_IF linebreak pipeline
Kedua operator memiliki prioritas yang sama dan dievaluasi dari kiri ke kanan (mereka asosiatif kiri). Seperti yang dikatakan para dokter:
Sebuah AND-OR
daftar adalah urutan satu atau lebih jaringan pipa dipisahkan oleh operator "&&"
dan"||"
.
Daftar adalah urutan satu atau lebih daftar AND-OR yang dipisahkan oleh operator ';'
dan '&'
dan secara opsional diakhiri oleh ';'
,'&'
atau.
Operator "&&"
dan "||"
harus memiliki hak yang sama dan harus dievaluasi dengan asosiasi kiri. Sebagai contoh, kedua perintah berikut menulis semata-mata untuk keluaran standar:
$ false && echo foo || echo bar
$ true || echo foo && echo bar
Dalam kasus pertama, false adalah perintah yang keluar dengan status 1
$ false
$ echo $?
1
yang berarti echo foo
tidak berjalan (yaitu, shortcircuiting echo foo
). Kemudian perintah echo bar
dieksekusi.
Dalam kasus kedua, true keluar dengan kode 0
$ true
$ echo $?
0
dan karena echo foo
itu tidak dieksekusi, maka echo bar
dieksekusi.
false && echo "Will not be printed"
.