2011-05-28 32 views

cevap

3

Bunu yapamazsın, ancak bunu yapabilirsiniz:

if [ ! true ] || [ true ] 

Genel bir kural olarak, [ için -a veya -o seçeneklerini kullanmayı deneyin asla. Burada

5

sorun ( bir operatör karakter ise [, sadece alır parametreleri ne olursa olsun yorumlayabilir bash basit buildtin komutu (test yazmak için başka bir yol), olmasıdır. Operatörler ayrıştırma komut yürütmeden önce gelir.

if [ \(! true \) -o true ] 
then 
    echo "Success!" 
else 
    echo "Fail!" 
fi 

veya

if [ '(' ! true ')' -o true ] 
then 
    echo "Success!" 
else 
    echo "Fail!" 
fi 

[[ ... ]] yapı zamanki sözdizimsel sınırlamaları olmayan bir özel sözdizimsel bir yapıdır:

[ ile ( ve ) kullanmak için, onları alıntı zorunda komutlar, başka bir seviyede çalıştığı için. Bu yüzden burada Ignacio'nun dediği gibi, parantezlerinizi belirtmeniz gerekmez. (Ayrıca, && ve -a ve -o yerine ||'u kullanmanız gerekir.)

İlgili konular