Neden " -a
veya -o
operatörünü asla kullanmıyorsunuz ?"
Çünkü belirsiz olabilirler ve dolayısıyla POSIX uyumlu değildirler :
-A ve -o ikili primerlerini ve '(' ve ')' operatörlerini belirten XSI uzantıları eskimiş olarak işaretlenmiştir. (Bunları kullanan birçok ifade, değerlendirilen belirli ifadelere bağlı olarak dilbilgisi tarafından belirsiz bir şekilde tanımlanır.) Bu ifadeleri kullanan komut dosyaları, aşağıdaki formlara dönüştürülmelidir. Birçok uygulama bu eski formları desteklemeye devam etse de, komut dosyaları, bunlar ve diğer primerler ve operatörlerle karıştırılabilecek kullanıcı tarafından sağlanan girdilerle uğraşırken son derece dikkatli olmalıdır. Uygulama geliştiricisi betiğe girdi oluşturan tüm durumları bilmiyorsa, aşağıdaki gibi çağrılar yapılır:
test "$1" -a "$2"
şu şekilde yazılmalıdır:
test "$1" && test "$2"
"Birkaç [
komut ve &&
ve ||
kabuk işleçlerini kullan)" nasıl yapabilirim ?
Birden fazla test yaparak ve bunları adı geçen operatörleri kullanarak zincirleyerek; Örneğin:
[ 0 -eq 0 -a \( 0 -eq 1 -o 1 -eq 1 \) ]
eşdeğer olarak yeniden yazılabilir:
[ 0 -eq 0 ] && ([ 0 -eq 1 ] || [ 1 -eq 1 ])
ya da daha iyisi:
[ 0 -eq 0 ] && { [ 0 -eq 1 ] || [ 1 -eq 1 ]; }
(
ve)
komutları gruplandıran işleçler? Eğer eskimişlerse, ikameleri nelerdir? (2)test "$1" -a "$2"
Değiştirilmelitest "$1" && test "$2"
veya değiştirilmeli((test "$1" && test "$2"))
mi? İhtiyacımız yok((..))
mu?