範囲{#..#}のBash forループ


17

{#..#}は、Pythonのrange()と同様に、一連の数字または文字を生成します。echo {1..5}コマンドラインでコマンドを実行すると、次のようになります。

1 2 3 4 5

代わりに、次のbashスクリプトは期待どおりに機能しません。

for i in {1..3};
do
    echo "Iteration $i"
done

印刷されます:

Iteration {1..3}

どうして?
*私は使用できますseqが、それは時代遅れです(http://www.cyberciti.biz/faq/bash-for-loop/


このエラーは、スクリプトが「sh」コマンドで実行された場合に発生します(「bash」を使用して試してください)。
Shake0

回答:


22

私はあなたのコードを試してみました(端末にコピーして貼り付けます)と、投稿したものとは異なる結果が生成されました:

for i in {1..3};
do
    echo "Iteration $i"
done
#---OUTPUT BELOW---
Iteration 1
Iteration 2
Iteration 3

Linux Mint 12 Lisa(Ubuntuから派生)をbashバージョン4.2.10(1)-releaseで使用している


2
あなたが正しいです!私はshとbashは同じものだと思った。
Shake012年

1
bashとshのはかなり異なっている無... bashがshをより可能であり、それはSHの肩の上に作られた:)彼らは、互換性の良い学位を持って、両方が、彼らはまた、その違いを持っている
zipizap

{{i..j}、{l..m}}のvarのようにネストされたリストを作成できることに注意してください。12 3 7 8 9
brown.2179

一部のディストリビューションでは/bin/sh実際にbashを指していますが、DebianおよびUbuntuでは通常、/bin/dashほとんどがPOSIX準拠ですが、bashと同じ構文をすべてサポートしていないものを指していることに注意してください。
dragon788
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.