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!
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!
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ırlarstr=a:b:c:d:e
IFS=: read -ra ary <<<"$str"
.
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
bu işe yaramıyor ... echo $ yapmaya çalışın [arr [1]} – mhstnsc
#!/bin/bash
str=a:b:c:d:e
arr=(${str//:/ })
ÇIKIŞ:
echo ${arr[@]}
a b c d e
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
#
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
@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 –
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. –
verir. Hata iletisi, "(" = "=" = "=" = "=" = "=" = "=" = "=" ($ str). –
Bu, özellikle bash sözdizimi. Hangi kabuk kullanıyorsunuz? Eğer komut dosyası # #/bin/sh "değiştiğinde" #!/bin/bash' –
Bunu değiştirdim, ancak hata iletisi geçmiyor –