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_IFdalam tata bahasa shell posix , yang merupakan bagian dari and_ordaftar perintah, yang juga termasuk|| yang merupakan OR_IFdengan 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_IFs ( &&) dan / atau OR_IFs ( ||) dapat dirangkai (seperti and_oryang 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-ORdaftar 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 footidak berjalan (yaitu, shortcircuiting echo foo). Kemudian perintah echo bardieksekusi.
Dalam kasus kedua, true keluar dengan kode 0
$ true
$ echo $?
0
dan karena echo fooitu tidak dieksekusi, maka echo bardieksekusi.
false && echo "Will not be printed".