Dalam bash
setiap variabel pada dasarnya adalah string (atau array atau fungsi, tetapi mari kita bicara tentang variabel reguler di sini).
Kondisi diuraikan berdasarkan nilai kembali dari perintah tes - nilai kembali bukan variabel, ini adalah kondisi keluar. Ketika Anda mengevaluasi if [ ... ]
atau if [[ ]]
atauif grep something
sesuatu seperti itu, nilai balik 0 (bukan string 0, tetapi status keluar 0 = sukses) berarti benar dan sisanya berarti salah (jadi, kebalikan dari apa yang Anda gunakan dalam bahasa pemrograman yang dikompilasi, tetapi karena ada satu cara untuk berhasil dan banyak cara untuk gagal, dan hasil yang diharapkan dari eksekusi biasanya sukses, 0 digunakan sebagai hasil standar yang paling umum jika tidak ada yang salah). Ini sangat berguna karena setiap biner dapat digunakan sebagai tes - jika gagal, itu salah, jika tidak maka itu benar.
true
dan false
program (biasanya ditimpa oleh builtin) hanya berguna program kecil yang tidak melakukan apa pun - true
berhasil melakukan apa-apa, dan keluar dengan 0, sementara false
mencoba melakukan apa-apa dan "gagal", keluar dengan 1. Kedengarannya tidak ada gunanya tetapi sangat berguna untuk skrip.
Adapun cara menyebarkan kebenaran di sekitar, terserah Anda. Sangat umum untuk hanya menggunakan "y" atau "ya" untuk kebenaran dan penggunaan if [ x"$variable" = x"yes" ]
(ditambahkan string dummy x
karena jika $variable
kebetulan panjangnya nol, ini melindungi dari membuat perintah palsu if [ = "yes" ]
yang tidak menguraikan). Mungkin juga berguna untuk hanya menggunakan string kosong untuk false, dan gunakan [ -z "$variable ]
untuk menguji apakah panjangnya nol (atau -n
tidak nol).
Pokoknya, sangat jarang untuk benar-benar harus melewati nilai-nilai boolean bash
- itu jauh lebih umum untuk hanya exit
pada kegagalan, atau mengembalikan hasil yang bermanfaat (atau nol jika ada masalah, dan menguji untuk string kosong), dan sebagian besar kasus dapat tes untuk kegagalan langsung dari status keluar.
Dalam kasus Anda, Anda menginginkan fungsi yang akan bertindak sebagai perintah lain (karena itu, kembalikan 0 pada kesuksesan), sehingga opsi terakhir Anda tampaknya merupakan pilihan yang tepat.
Juga, Anda bahkan mungkin tidak perlu return
pernyataan. Jika fungsinya cukup sederhana, Anda dapat menggunakan fakta bahwa itu hanya mengembalikan status dari perintah yang dieksekusi terakhir dalam fungsi. Jadi fungsi Anda bisa saja
drive_xyz_available() {
[ -e /dev/disk/by-uuid/whatever ]
}
jika Anda menguji keberadaan node perangkat (atau grep /proc/mounts
untuk memeriksa apakah itu sudah terpasang?).
help true ; help false ; help exit