このようなことをすることは可能ですか?
start=1
end=10
echo {$start..$end}
# Ouput: {1..10}
# Expected: 1 2 3 ... 10 (echo {1..10})
bashでは、ブレースの拡張は変数の拡張の前に行われるため、これは直接不可能です。
代わりに、算術for
ループを使用してください。
start=1
end=10
for ((i=start; i<=end; i++))
do
echo "i: $i"
done
i: 1
i: 2
i: 3
i: 4
i: 5
i: 6
i: 7
i: 8
i: 9
i: 10
の使用を検討する必要がありますseq(1)
。evalを使用することもできます。
eval echo {$start..$end}
そしてここにseq
seq -s' ' $start $end
あなたは使用する必要がありますeval
:
eval echo {$start..$end}
がない場合はseq
、プレーンなforループを使用することをお勧めします
for (( i=start; i<=end; i++ )); do printf "%d " $i; done; echo ""
あなたはそれがBASHであると確信していますか?ZSHはこれをあなたが望む方法で処理します。ブレース拡張は変数拡張などの他の拡張タイプの前に行われるため、これはBASHでは機能しません。したがって、別の方法を使用する必要があります。
ブレースと可変拡張を組み合わせる必要がある特別な理由はありますか?おそらく、あなたの問題への異なるアプローチはこれの必要性を取り除くでしょう。
私は通常これを行います:
echo `seq $start $end`
-s exを使用します:seq -s'' 1 10出力:1 2 3 4 5 6 7 8 9 10