Apa gunanya operator "null" dalam skrip BASH? Saya mengerti bahwa ini digunakan sebagai pengganti yang mengikuti if
perintah ketika Anda tidak memiliki sesuatu untuk dikatakan, tetapi perlu perintah untuk memungkinkan program berjalan dengan baik. Tapi apa gunanya keseluruhan untuk itu? Kapan Anda akan menggunakannya? Kapan masuk akal untuk menggunakannya?
13
Jawaban:
Terkadang berguna untuk memungkinkan efek samping ekspansi parameter terjadi.
Misalnya, menetapkan nilai default
sumber
:
perintah dan parameter di manual bash.${name:="John Doe"}
akan diperluas, menyebabkan penugasan berlangsung karena dibaca sebagai argumen untuk:. Tanpa: shell akan mencoba menjalankan "John Doe" sebagai perintah, atau nilainya$name
jika sudah disetelAnda juga dapat menggunakannya untuk loop tanpa akhir:
sumber
while true
lebih mudah dibaca, karena (a) ia menggunakan lebih sedikit tanda baca, dan (b) lebih mirip dengan bahasa yang diturunkan dari C.Anda dapat menggunakannya untuk membuat file tanpa menjalankan program ::
Ini jauh lebih cepat daripada
touch /path/to/file
(karena tidak memerlukan menjalankantouch
program) dan mungkin sedikit lebih portabel daripada sekadaryang tampaknya bekerja pada banyak sistem. Demikian pula, dapat digunakan untuk memeriksa apakah Anda memiliki akses tulis ke file :
Meskipun ini, juga, secara umum dapat dilakukan tanpa
:
. Peringatan:(Lihat pertanyaan terkait untuk alasan mengapa ini lebih dapat diandalkan daripada
if [ -w /path/to/file ]
.)sumber
Jauh di belakang, di Unix V6 dan Thompson Shell,
:
itu sebenarnya digunakan sebagai bagian darigoto
pernyataan. Menurut manual , ini awalnya muncul di Unix versi 3:Saat ini, dalam
bash
, itu digunakan sebagai operator no-op, mengembalikan kesuksesan. Memang, jika Anda melihat kode sumber , Anda akan melihat keduanyatrue
dan:
menggunakan fungsi yang samaint colon_builtin()
,, di bawahnya. Tidak ada:
perintah non-builtin, dan/bin/true
sebenarnya adalah perintah yang cukup besar untuk apa yang dilakukannya.:
dapat digunakan di mana sajatrue
digunakan, misalnya dalamcommand_that_can_fail || true
, meskipun itu mungkin membingungkan para non-ahli. Baca lebih lanjut di sini .sumber
Anda dapat menggunakannya pada tes positif
if
perintah ketika Anda hanya ingin melakukan sesuatu di sisi negatif. Sebagai contoh:Tanpa
:
bash akan menghasilkan kesalahan sintaksis.Ini adalah contoh yang terlalu disederhanakan. Secara umum Anda akan menggunakan teknik seperti itu dalam pengkodean pendahuluan ketika Anda belum menulis segmen kode itu dan hanya perlu sesuatu yang tidak menghasilkan kesalahan.
sumber
if pgrep firefox >/dev/null ; then : ; else echo "Firefox not running"; fi
akan menunjukkan kesalahan hanya jika firefox tidak berjalan. Dengan kata lain, ketika Anda perlu melakukan sesuatu hanya ketika perintah memiliki kesalahan. Di satu sisi ini setara denganpgrep firefox || echo "Firefox not running"
, meskipun lebih mudah dibaca dan memungkinkan lebih banyak perintahSaya hanya menggunakannya dalam skrip dengan perintah SSH untuk menjaga skrip agar tidak keluar.
Dalam hal ini, saya ingin melihat apakah pengguna dapat terhubung ke satu set server. Jika koneksi OK, host jarak jauh akan bergema OK. Jika koneksi gagal, SSH akan merespons dengan kesalahan. Namun, saya ingin skrip saya keluar dengan 0 dan bukan nilai perintah SSH jika gagal. Jadi pada dasarnya saya menjebak kesalahan SSH dengan ORing
||
dengan perintah nol:
. Terlihat seperti ini:Dengan begitu saya mendapatkan output dari SSH tetapi bukan kode kesalahan:
sumber