Primer Boolean Cepat untuk Bash
The if
Pernyataan mengambil perintah sebagai argumen (seperti halnya &&
, ||
, dll). Kode hasil integer dari perintah ditafsirkan sebagai boolean (0 / null = true, 1 / else = false).
The test
Pernyataan mengambil operator dan operan sebagai argumen dan mengembalikan kode hasil dalam format yang sama seperti if
. Sebuah alias dari test
pernyataan tersebut adalah [
, yang sering digunakan dengan if
untuk melakukan perbandingan yang lebih kompleks.
The true
dan false
pernyataan melakukan apa-apa dan kode hasil (0 dan 1, masing-masing). Sehingga mereka dapat digunakan sebagai boolean literal di Bash. Tetapi jika Anda meletakkan pernyataan di tempat yang ditafsirkan sebagai string, Anda akan mengalami masalah. Dalam kasus Anda:
if [ foo ]; then ... # "if the string 'foo' is non-empty, return true"
if foo; then ... # "if the command foo succeeds, return true"
Begitu:
if [ true ] ; then echo "This text will always appear." ; fi;
if [ false ] ; then echo "This text will always appear." ; fi;
if true ; then echo "This text will always appear." ; fi;
if false ; then echo "This text will never appear." ; fi;
Hal ini mirip dengan melakukan sesuatu seperti echo '$foo'
vs echo "$foo"
.
Saat menggunakan test
pernyataan, hasilnya tergantung pada operator yang digunakan.
if [ "$foo" = "$bar" ] # true if the string values of $foo and $bar are equal
if [ "$foo" -eq "$bar" ] # true if the integer values of $foo and $bar are equal
if [ -f "$foo" ] # true if $foo is a file that exists (by path)
if [ "$foo" ] # true if $foo evaluates to a non-empty string
if foo # true if foo, as a command/subroutine,
# evaluates to true/success (returns 0 or null)
Singkatnya , jika Anda hanya ingin menguji sesuatu sebagai lulus / gagal (alias "benar" / "salah"), maka berikan perintah ke pernyataan Anda if
atau lainnya &&
, tanpa tanda kurung. Untuk perbandingan yang rumit, gunakan tanda kurung dengan operator yang tepat.
Dan ya, saya sadar tidak ada yang namanya tipe boolean asli di Bash, dan itu if
dan [
dan true
secara teknis "perintah" dan bukan "pernyataan"; ini hanya penjelasan yang sangat mendasar dan fungsional.