このようなことをすることは可能ですか?
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 ""
私は通常これをするだけです:
echo `seq $start $end`
あなたはそれがBASHであることを肯定していますか? [〜#〜] zsh [〜#〜] は、これを希望どおりに処理します。これはBASHでは機能しません。これは、ブレースの展開が、変数展開などの他の展開タイプの前に発生するためです。そのため、別の方法を使用する必要があります。
ブレースと変数展開を組み合わせる必要がある特定の理由は何ですか?おそらくあなたの問題に対する別のアプローチは、この必要性を取り除くでしょう。
use -s ex:seq -s '' 1 10 output:1 2 3 4 5 6 7 8 9 10