& mengeksekusi perintah di latar belakang, dan akan mengembalikan 0 terlepas dari statusnya.
Dari halaman manual:
Jika perintah diakhiri oleh operator kontrol &, shell mengeksekusi perintah di latar belakang dalam sebuah subkulit. Shell tidak menunggu perintah selesai, dan status pengembalian adalah 0. Perintah dipisahkan oleh; dieksekusi secara berurutan; shell menunggu setiap perintah untuk diakhiri secara bergantian. Status pengembalian adalah status keluar dari perintah terakhir yang dijalankan.
Lihat apa perintah Anda:
test -x examples.desktop && echo $?
Ini berarti periksa untuk melihat apakah examples.desktop dapat dieksekusi dan jika dijalankan maka jalankan echo $? .
test -x examples.desktop & echo $?
berarti periksa untuk melihat apakah examples.desktop dapat dieksekusi di "latar belakang". Kemudian jalankan echo $? .
Arti dari && dan & secara intrinsik berbeda.
- Apa itu
&&di Bash? Di Bash—dan banyak bahasa pemrograman lainnya—&&artinya “DAN”. Dan dalam konteks eksekusi perintah seperti ini, itu berarti item di kiri dan kanan&&harus dijalankan secara berurutan dalam hal ini. - Apa itu
&di Bash? Dan satu&berarti bahwa perintah sebelumnya—ke kiri langsung dari&—harus dijalankan di latar belakang.
Jadi, lihat contoh Anda:
[email protected]:~$ test -x examples.desktop && echo $?
[email protected]:~$ test -x examples.desktop & echo $?
[1] 2992
0
Perintah pertama — seperti yang terstruktur — sebenarnya tidak mengembalikan apa pun. Tapi perintah kedua mengembalikan [1] 2992 di mana 2992 mengacu pada ID proses (PID) yang berjalan di latar belakang dan 0 adalah keluaran dari perintah pertama.
Karena perintah kedua hanya menjalankan test -x examples.desktop di latar belakang ini terjadi cukup cepat, sehingga ID proses muncul dan segera hilang.