Kabukta bir boole değişkeni kavramı yoktur.
Kabuk değişkenleri yalnızca olabilir text
((bir dize) ve bazı durumlarda, bu metin bir tamsayı olarak yorumlanabilir 1
, 0xa
,010
vb.)
Bu nedenle, bir flag=true
kabuk hiçbir şekilde doğruluk veya yanlışlık anlamına gelmez.
sicim
Ne yapılabilirdi ya bir dize karşılaştırma [ "$flag" == "true" ]
ya da bazı komut değişken içeriği kullanın ve check sonuçlarını yürütmek gibi true
(her ikisi de yürütülebilir bir adlandırılan olduğundan true
ve bir adlandırılan false
bu komutun çıkış kodu sıfır ise) komut olarak ve check (başarılı).
$flag; if [ "$?" -eq 0 ]; then ... fi
Veya daha kısa:
if "$flag"; then ... fi
Bir değişkenin içeriği bir komut !
olarak kullanılıyorsa, komutun çıkış durumunu olumsuzlamak için bir komut kullanılabilir: eğer her ikisi de arasında boşluk varsa ! cmd
:
if ! "$flag"; then ... fi
Komut dosyası şöyle değişmeli:
flag=false
while ! "$flag"
do
read x
if [ "$x" == "true" ]
then
flag=true
fi
echo "${x} : ${flag}"
done
tamsayı
Sayısal değerler ve Aritmetik Genişlemeler kullanın .
Bu durumda, çıkış kodu $((0))
IS 1
ve çıkış kodu $((1))
olan 0
.
Bash, ksh ve zsh aritmetiği bir içinde gerçekleştirilebilir ((..))
(başlangıç $
eksik olduğuna dikkat edin ).
flag=0; if ((flag)); then ... fi
Bu kodun taşınabilir bir sürümü daha karmaşıktır:
flag=0; if [ "$((flag))" -eq 0 ]; then ... fi # test for a number
flag=0; if [ "$((flag))" == 0 ]; then ... fi # test for the string "0"
Bash / ksh / zsh içinde yapabilecekleriniz:
flag=0
while ((!flag))
do
read x
[ "$x" == "true" ] && flag=1
echo "${x} : ${flag}"
done
alternatif olarak
"Boolean değişkenini ters çevir" ifadesini (sayısal bir değer içermesi koşuluyla):
((flag=!flag))
Bu ya da değerini değiştirecek .flag
0
1
Not : Lütfen kodunuzu bir soru olarak göndermeden önce, sorunu bulmak için yeterli olan birçok kez https://www.shellcheck.net/ adresindeki hataları kontrol edin .