単に保存し、名前bashのPerlリストと同等のものは何ですか? perlの一
my @fruit = (apple, orange, kiwi);
foreach (@fruit) {
print $_;
}
同等はbashで何だろうのリストを反復処理するために、次の操作を行いますか?このよう
単に保存し、名前bashのPerlリストと同等のものは何ですか? perlの一
my @fruit = (apple, orange, kiwi);
foreach (@fruit) {
print $_;
}
同等はbashで何だろうのリストを反復処理するために、次の操作を行いますか?このよう
bashはアレイをサポート:
fruits=(apple orange kiwi "dried mango")
for fruit in "${fruits[@]}"; do
echo "${fruit}"
done
これは配列要素がスペースや$ IFSの他のメンバーを含有することができるという利点を有します。別々の要素として正しく挿入されている限り、同じ方法で読み込まれます。
for i in apple orange kiwi do echo $i done
'echo" $ i "'はループ内で - 引用符を使わずに、要素上でglob展開とIFS分割を行い、 'foo bar'を' foo bar'と同じにして '* .txt'をechoします文字列 '* .txt'を出力するのではなく、カレントディレクトリ内のすべての一致するファイルを検索します。 –
:あなたの果物の名前にスペースが含まれている場合、これは動作しません
FRUITS="apple orange kiwi"
for FRUIT in $FRUITS; do
echo $FRUIT
done
注意してください。その場合は代わりにthis answerを参照してください。これは移植性はやや劣りますが、はるかに堅牢です。
Mac OS XのBashでは、「do」の前にセミコロンか改行が必要です。 – emk
はい、あなたの "do"が新しい行にない限り、セミコロンが必要です。また、$ IFSには、これが動作するためのスペースが必要です。 –
は反復処理中のIFSに依存しています(単なる割り当てではありません)。不良なjujuであるため、この回答は最適ではありません。私がzshでテストしていたので、その後bashで修正されました。 –
正解として私が好きな答えが受け入れられたので、ここで別の話題に移ります:IFS
を個人的な利益のために使う方法。 IFS
変更は独自のサブプロセスに分離されるように、私は括弧内のコードを入れてきました:-P
fruits="apple,orange,kiwifruit,dried mango"
(IFS=,
for fruit in $fruits; do
echo "$fruit"
done)
。したがって、括弧で囲まれたセクションの最後には、IFS
が元の値に戻されます。 (POSIXのSHとは異なり):-)
'fruits =(apple orange" kiwi fruit ")'を試してみると、bashは "Kiwi"と "fruit"をループ中に別々のエンティティに分割します。あなたが/ inの場合、あなたはIFSによって焼かれます。しかし、 'echo $ {fruits [2]}は正しいことをします。これはうれしいことです。 – emk
動作するこのコードのバージョンについては、http://stackoverflow.com/questions/78592/what-is-a-good-equivalent-to-perl-lists-in-bash#78631を参照してください。 – emk
フィードバックありがとう!一定。 –
DebianとMac OS Xのbashを使って、ここで別々の果物として「乾燥」と「マンゴー」印刷が行われています。これは私にとってIFSを守るものではありません。 :-( – emk
emk、それは私の悪いです - 私はzshでテストしていましたが、bashではなく固定しました。 –
これが動作することを確認できます。 – emk