2012-04-12 17 views
12

Kabuk betiğindeki dizeye nasıl bir dizge ayırabilirim?Diziye bölünmüş dizgi Shellscript

IFS='delimiter' ile denedim ve (for, while) döngülerle çalışır, ancak bu dizeden bir diziye ihtiyacım var.

Dizgiden nasıl dizi yapabilirim?

Teşekkürler!

cevap

14
str=a:b:c:d:e 
IFS=: 
ary=($str) 
for key in "${!ary[@]}"; do echo "$key ${ary[$key]}"; done 

çıkış

0 a 
1 b 
2 c 
3 d 
4 e 

Başka bir (deneme) tekniği

: Sadece okuma komutu süresince IFS değişkenine değişiklik sınırlar

str=a:b:c:d:e 
IFS=: read -ra ary <<<"$str" 

.

+1

verir. Hata iletisi, "(" = "=" = "=" = "=" = "=" = "=" = "=" ($ str). –

+1

Bu, özellikle bash sözdizimi. Hangi kabuk kullanıyorsunuz? Eğer komut dosyası # #/bin/sh "değiştiğinde" #!/bin/bash' –

+0

Bunu değiştirdim, ancak hata iletisi geçmiyor –

6

IFS veya bir döngü değişen gerektirmeyen bir çözüm Bulunan :

str=a:b:c:d:e 
arr=(`echo $str | cut -d ":" --output-delimiter=" " -f 1-`) 

çıkışı:

echo ${arr[@]} 
a b c d e 
+1

bu işe yaramıyor ... echo $ yapmaya çalışın [arr [1]} – mhstnsc

15
#!/bin/bash 

str=a:b:c:d:e 
arr=(${str//:/ }) 

ÇIKIŞ:

echo ${arr[@]} 
a b c d e 
0

cevapları birleştiren yukarıda çalışan bir şeye ya da beni

set -- `echo $PATH|cut -d':' --output-delimiter=" " -f 1-`; for i in "[email protected]"; do echo $i; done 

O çalışmıyor

# set -- `echo $PATH|cut -d':' --output-delimiter=" " -f 1-`; for i in "[email protected]"; do echo $i; done 
/usr/local/sbin 
/usr/local/bin 
/usr/sbin 
/usr/bin 
/sbin 
/bin 
# 
+0

Bir test dizisi için $ PATH kullanımı hoş bir dokunuş, ancak: çok karmaşık bir yoldur ve bu durum, örneğin, [zzk'den nasıl farklıdır? cevap] (https://stackoverflow.com/a/13784224/3789665)? – greybeard

+0

@greybeard tl; dr Yapmıyor :) - zzk'in cevabının benim için pek işe yaramadığını buldum, bu yüzden 'set -' ile ayarladıktan sonra verilen çok sayıda cevaptan yararlanarak faydalı bir şekilde harmanladım. Bu benim kendi amaçlarım için oldu, ancak diğerleri de aynı sorunu yaşadıysa geri paylaşın –

+0

FWIW Yolda listelenen tüm klasörlere karşı birden çok sınama çalışması gerekiyordu - özellikle ayrıcalık yükseltme sorunlarına karşı denetim için. –