2009-05-25 23 views
22

Bazı nedenlerden dolayı, boşluk karakterleri olan bağımsız değişkenleri kabul edebilmem için komut dosyasına ihtiyacım var. aşağıdaki gibi örneğin ben bir komut dosyası varsa,Kabuk komut dosyasında boşluk içeren bağımsız değişken geçiriliyor

for SOME_VAR in [email protected] 
do 
    echo "$SOME_VAR" 
    cd "$SOME_VAR" 
done; 

Ben komut dosyasına argümanları geçerse

sh foo.sh "Hello world" 

Ben Merhaba dünya yazdırmak için komut bekliyorum (foo.sh denir varsayarak) ve dizini "Merhaba dünya" olarak değiştirin. Ama bunun yerine

hello 
cd: 5: can't cd to hello 
world 
cd: 5: can't cd to world 

yüzden bir kabuk içinde bir komuta uzay karakter ile argüman geçmesi nasıl tam olarak bu hata mesajını almak ?!

cevap

40

Sen de tırnak içinde [email protected] sarmak gerekir: "[email protected]"

Bu argümanlar boşluk görmezden kabuk söyler; tüm argümanları çok uzun bir dizeye dönüştürmez.

+0

XD cevabınız için teşekkürler, bu yanıtı kendim yanıtlamaya gidiyorum, biraz daha açıklama http://tldp.org/LDP/abs/html/internalvariables.html#ARGLIST – Jeffrey04

+0

Ama eğer $ @ bir liste oluşturuyorsa " etrafında temelde bir uzun dizeye birleştirirdi.Yukarıda yineleme olmaz mı? Ve bu durumda bir for döngüsü, normal bir "echo" $ @ "; cd" $ @ sahip gerçek bir kullanımı yoktur " " İçinde satırlar arası kesinti sınırlarını değil, boşlukları sınırlamak için "kullanabileceğim bir çözüm var mı? –

+4

@AndreasWederbrand: Hayır" $ @ "," her bir kişiyi sarma "anlamına gelen özel bir belirtecidir tırnak içinde ". Yani" a "bc", "abc" veya "a" "b" "c" yerine "a" "bc" ye dönüşür. –

İlgili konular