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ı test
deyimi ise [
sıklıkla kullanılır, hangi if
daha karmaşık karşılaştırmalar yapmak için.
true
Ve false
tablolar 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, test
sonuç 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 if
veya &&
parantez 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 if
ve [
ve true
teknik olarak "komutları" değil "ifadeleri" dir; bu sadece çok temel ve işlevsel bir açıklamadır.