質問: bashで区切り文字で文字列を分割するにはどうすればいいですか? この文字列を変数に格納します。in="bla@some.com;john@home.com" では、文字列を;デリミタで分割して、次のようにします。addr1="bla@some.com" addr2="john@home.com" 私は必ずしもaddr1およびaddr2変数を必要としません。それらが配列の要素であれば、それはさらに優れています。以下の答えからの提案の後で、私は私が後にいたものである以下に終わりました:#!/usr/bin/env bash in="bla@some.com;john@home.com" mails=$(echo $in | tr ";" "\n") for addr in $mails do echo "> [$addr]" done 出力:> [bla@some.com] > [john@home.com] internal_field_separator (ifs)を;に設定することを含む解決策がありました。その答えがどうなったのかよくわかりません。どうやってifsをデフォルトに戻しますか?re:ifs解決策、私はこれを試してみましたそしてそれはうまくいきます、私は古いifsを保存してそれからそれを復元しますin="bla@some.com;john@home.com" oifs=$ifs ifs=';' mails2=$in for x in $mails2 do echo "> [$x]" done ifs=$oifs ところで、私が試したときmails2=($in) $inを囲む括弧なしで、ループでそれを印刷するとき、私は最初の文字列だけを手に入れました。
回答: in="bla@some.com;john@home.com" ifs=';' read -a in_arr <<< "${in}" for entry in "${in_arr[@]}" do echo $entry done 出力bla@some.com john@home.com システム:ubuntu 12.04.1