Bash için Hızlı Boole Astarı
ifİfadesi bağımsız değişken olarak bir komut alır (gibi &&, ||vs.). Komutun tamsayı sonuç kodu bir boole (0 / null = true, 1 / else = false) olarak yorumlanır.
testİfadesi bağımsız değişkenleri olarak operatörleri ve işlenen alır ve aynı biçimde bir sonuç kodunu if. Bir diğer adı testdeyimi ise [sıklıkla kullanılır, hangi ifdaha karmaşık karşılaştırmalar yapmak için.
trueVe falsetablolar hiçbir şey ve bir sonuç kodu döndürür (0 ve 1 sırasıyla). Böylece Bash'te boole değişmezleri olarak kullanılabilirler. Ancak ifadeleri dize olarak yorumlandıkları bir yere koyarsanız, sorun yaşarsınız. Senin durumunda:
if [ foo ]; then ... # "if the string 'foo' is non-empty, return true"
if foo; then ... # "if the command foo succeeds, return true"
Yani:
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;
Bu, echo '$foo'vs. gibi bir şey yapmaya benzer echo "$foo".
İfadeyi kullanırken, testsonuç kullanılan operatörlere bağlıdır.
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)
Kısacası , sadece geçiş olarak deney şey istiyorsanız / (aka / "doğru" "yanlış") başarısız, sonra bir komut geçmesi ifveya &¶ntez olmadan, vb açıklamada. Karmaşık karşılaştırmalar için uygun operatörlerle parantez kullanın.
Ve evet, orada Bash yerli boolean tipi diye bir şey var, o da farkındayım ifve [ve trueteknik olarak "komutları" değil "ifadeleri" dir; bu sadece çok temel ve işlevsel bir açıklamadır.