次のスクリプトがあります。
FOOS=foo{1..5}
for i in `echo $FOOS` do
echo bar
done
今、私は中括弧拡張がリテラルでのみ機能することを理解しています。つまり、エコです。ただし、これはすべてbar
コンソールに1つを印刷するだけです。なぜ(文字列/中括弧拡張が機能しない)?
私が期待していることは次のとおりです。
foo{1..5}
拡張()を表す文字列を変数に割り当てます。FOOS
- replacement
$FOOS
なので基本的にこれを得ましたfor i in 'echo foo{1..5}' do
(ここでバックティックを避けられないようです)。 - echoを実行したので、今
for i in foo1 foo2 foo3 foo4 foo5 do
bar
コンソール出力を5回実行して印刷します。bar
唯一の出力で画面に1つだけ印刷しないでください:-)
答え1
1.
FOO=$(echo foo{1..5})
しかし、より良いのは配列を使用することです
FOO=(foo{1..5})
2.
echo ${FOO[*]}
4.
for i in {1..5}
do
echo bar
done
または
for i in $(seq 5)
do
echo bar
done