IFS ve

2016-04-10 13 views
0

numaralı telefondan tekli pozisyonlarda geçiş yapmak için iki sorum var.IFS ve

  1. Senaryonun kod satırında aşağıdaki bulduk: IFS=${IFS#??} Ben tam olarak ne yaptığını anlamak istiyorum? Ben dizinden her yerde bir şeyler gerçekleştirmeye çalışıyorum zaman
  2. gibi mesela .:

    $1 = home/user/bin/etc/something... 
    

    yüzden "/" ve ardından

    while [ -e "$1" ]; do 
        for F in `$1` 
         #do something 
        done 
    shift 
    done 
    
  3. gibi döngü boyunca bunun içinde devam etmek IFS değiştirmeniz gerekir

Doğru yol bu mu?

+2

değil yapmaya çalıştığını tam olarak emin 2. soruyla ilgili olarak: '$ {IFS # ??}', IFS'nin solundan iki karakter çıkarır. Parametre Genişletme için 'adam bash' kontrol edin. Ayrıca [Bash SSS 73] 'ı da okuyabilirsiniz (http://mywiki.wooledge.org/BashFAQ/073). –

+0

* "İki sorum var." * Sonra iki ayrı soru yayınlayın, böylece bunları ayrı ayrı tartışabilir ve yanıtlayabiliriz ve tek bir çözüm sonunda çözüm olarak kabul edilebilir. Teşekkürler, – tripleee

cevap

5

${var#??}shell parameter expansion'dur. #'dan sonra yazılan desenle $var'un başlangıcını eşleştirmeye çalışır. Eğer varsa, o kısım çıkarılmış $var değişkenini döndürür. ? herhangi bir karakterle eşleştiğinden, bu, ${var#??} öğesinin ilk iki karakterini $var varyasyonundan kaldırdığı anlamına gelir.

$ var="hello" 
$ echo ${var#??} 
llo 

Yani IFS=${IFS#??} ile onun iki birinci karakter çıkardıktan sonra onun değerine IFS sıfırlıyorsanız.

bir / -delimited dizede kelimeler üzerinden döngü için

, bunun üzerinden daha sonra döngü bir diziye içine parçalı dize saklamak ve:

$ IFS="/" read -r -a myarray <<< "home/user/bin/etc/something" 
$ for w in "${array[@]}"; do echo "-- $w"; done 
-- home 
-- user 
-- bin 
-- etc 
-- something 
İlgili konular