SORU
28 Mayıs 2009, PERŞEMBE


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
28 Mayıs 2009, PERŞEMBE


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"

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jay Will

    Jay Will

    19 NİSAN 2006
  • Ricardo Cerqueira

    Ricardo Cerq

    28 Mayıs 2008
  • Stanislav Petrov

    Stanislav Pe

    7 ŞUBAT 2009