24

perl では、次のようにして、名前のリストを保存して反復処理します。

my @fruit = (apple, orange, kiwi);
foreach (@fruit) {
        print $_;
}

同等のものはbashで何ですか?

4

4 に答える 4

45

bash (POSIX sh とは異なり) は配列をサポートします。

fruits=(apple orange kiwi "dried mango")
for fruit in "${fruits[@]}"; do
  echo "${fruit}"
done

これには、配列要素にスペースや $IFS の他のメンバーを含めることができるという利点があります。それらが別々の要素として正しく挿入されている限り、それらは同じ方法で読み出されます。

于 2008-09-17T00:21:22.567 に答える
11

このような:

FRUITS="apple orange kiwi"
for FRUIT in $FRUITS; do
  echo $FRUIT
done

果物の名前にスペースがある場合、これは機能しないことに注意してください。その場合は、代わりにこの回答を参照してください。移植性はわずかに劣りますが、はるかに堅牢です。

于 2008-09-17T00:16:42.127 に答える
6

私が気に入った回答が正解として受け入れられたので、次は別の話題に移りましょうIFS。個人的な利益のために使用する方法です。:-P

fruits="apple,orange,kiwifruit,dried mango"
(IFS=,
 for fruit in $fruits; do
     echo "$fruit"
 done)

IFS変更が独自のサブプロセスに分離されるように、コードを括弧で囲みました。したがって、括弧で囲まれたセクションの最後で、IFS元の値に戻されます。:-)

于 2008-09-17T00:20:05.847 に答える
4
フォー・アイ・イン・アップル・オレンジ・キウイ
行う
  エコー $i
終わり
于 2008-09-17T00:16:32.627 に答える