GNU/Linux >> Belajar Linux >  >> Linux

Apa Tujuan The Colon Builtin ':' Melayani?

Saya telah meretas banyak skrip shell, dan terkadang hal yang paling sederhana membuat saya bingung. Hari ini saya menemukan skrip yang banyak menggunakan : (titik dua) bash bawaan.

Dokumentasinya tampaknya cukup sederhana:

: (a colon)  
     : [arguments]  

Tidak melakukan apa pun selain memperluas argumen dan melakukan pengalihan. Status pengembalian adalah nol.

Namun saya sebelumnya hanya melihat ini digunakan dalam demonstrasi ekspansi shell. Kasus penggunaan dalam skrip yang saya temukan memanfaatkan struktur ini secara ekstensif:

if [ -f ${file} ]; then
    grep some_string ${file} >> otherfile || :
    grep other_string ${file} >> otherfile || :
fi

Sebenarnya ada ratusan grep, tetapi jumlahnya lebih banyak. Tidak ada pengalihan input/output selain struktur sederhana di atas. Tidak ada nilai kembalian yang diperiksa nanti dalam skrip.

Saya membaca ini sebagai konstruksi tidak berguna yang mengatakan "atau tidak melakukan apa-apa". Tujuan apa yang dapat digunakan untuk mengakhiri grep ini dengan "atau tidak melakukan apa-apa"? Dalam kasus apa konstruk ini akan menyebabkan hasil yang berbeda dari sekadar mengabaikan || : dari semua contoh?

Jawaban yang Diterima:

Tampaknya : s dalam skrip Anda digunakan sebagai pengganti true . Jika grep tidak menemukan kecocokan dalam file, itu akan mengembalikan kode keluar bukan nol; seperti yang disebutkan jw013 dalam komentar, jika errexit disetel, mungkin dengan -e pada baris Shebang, skrip akan keluar jika salah satu dari grep s gagal menemukan kecocokan. Jelas, bukan itu yang diinginkan penulis, jadi dia menambahkan || : untuk membuat status keluar dari perintah gabungan tertentu selalu nol, seperti yang lebih umum (dalam pengalaman saya) || true /|| /bin/true .


Linux
  1. Apa Arti Ampersand Di Akhir Baris Skrip Shell?

  2. Apa Artinya Dalam Keluaran Dari Ps?

  3. Apa yang dilakukan Rackspace di cloud?

  1. Apa yang dilakukan baris '!/bin/sh -e'?

  2. Apa yang dilakukan izin eksekusi?

  3. Apa arti 'rc' di `.bashrc`, dll.?

  1. Apa tujuan dari cd ` (backtick)?

  2. Apa yang dilakukan skrip sh ini jika dijalankan?

  3. Skrip init Linux apa yang dicapai 0<&- &>