Nasıl Bash ayırıcı üzerinde bir dize bölmek?
Nasıl Bash ayırıcı dayalı bir dize bölmek?
Bu dize bir değişken depolanan var:
IN="bla@some.com;john@home.com"
Şimdi ben o ;
ayırıcı tarafından dizeleri bölmek istiyorum:
ADDR1="bla@some.com"
ADDR2="john@home.com"
Mutlaka ADDR1
ADDR2
değişkenleri ihtiyacım yok. Hatta daha iyi bir dizinin öğeleri.
Aşağıda cevapları önerilerini sonra, sonra ne olduğunu, hangi mesajlar ile
#!/usr/bin/env bash
IN="bla@some.com;john@home.com"
arr=$(echo $IN | tr ";" "\n")
for x in $arr
do
echo "> [$x]"
done
Çıkış:
> [bla@some.com]
> [john@home.com]
;
30 *(EĞERLER) ayarı içeren bir çözüm vardı. Bu cevap ne oldu emin değilim, nasıl IFS
geri varsayılana musunuz?
YNT: IFS
çözüm işe yarıyor, eski IFS
duruyorum ve sonra geri yüklemek: bu ve çalıştım
IN="bla@some.com;john@home.com"
OIFS=$IFS
IFS=';'
arr2=$IN
for x in $arr2
do
echo "> [$x]"
done
IFS=$OIFS
Denedim BTW,
arr2=($IN)
Ben sadece döngü içinde yazdırırken ilk dizesi, $IN
çalışır parantezler olmadan var.
CEVAP
internal field separator (EĞERLER) değişkeni ayarlayın ve bir diziye ayrıştırmak edelim. Bu bir komut olduğunda, o zaman 22* *atama sadece tek bir komut ortamı (read
) yer alır. Sonra üzerinden yineleme edebileceğimiz bir diziye IFS
değişken değerine göre giriş ayrıştırır.
IFS=';' read -ra ADDR <<< "$IN"
for i in "${ADDR[@]}"; do
# process "$i"
done
Öğeleri ;
, bir dizi içine iterek ayrı bir satır ayrıştırılamadı. İşleme için malzeme $IN
, Her zaman giriş satırı ;
ile ayrılan bütün:
while IFS=';' read -ra ADDR; do
for i in "${ADDR[@]}"; do
# process "$i"
done
done <<< "$IN"
Nasıl C multi-karakter bir ayırıcı ile...
Nasıl birden çok dize bash kabuğunda e...
C ile satır başı üzerinde bir dize böl...
Nasıl Bash dize değişkenleri bitiştirm...
Nasıl bash sayı değişkenleri tarafında...