&
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.