web-dev-qa-db-ja.com

bash seq置換の変数({1..10})

このようなことをすることは可能ですか?

start=1
end=10
echo {$start..$end}
# Ouput: {1..10}
# Expected: 1 2 3 ... 10 (echo {1..10})
47
Tyilo

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
52
anubhava

seq(1)の使用を検討する必要があります。 evalを使用することもできます:

eval echo {$start..$end}

そして、これはseqです

seq -s' ' $start $end
20
cnicutar

evalを使用する必要があります。

eval echo {$start..$end}
8
bmk

seqがない場合は、プレーンなforループを使い続けることができます。

for (( i=start; i<=end; i++ )); do printf "%d " $i; done; echo ""
7
glenn jackman

私は通常これをするだけです:

echo `seq $start $end`
2
opsguy

あなたはそれがBASHであることを肯定していますか? [〜#〜] zsh [〜#〜] は、これを希望どおりに処理します。これはBASHでは機能しません。これは、ブレースの展開が、変数展開などの他の展開タイプの前に発生するためです。そのため、別の方法を使用する必要があります。

ブレースと変数展開を組み合わせる必要がある特定の理由は何ですか?おそらくあなたの問題に対する別のアプローチは、この必要性を取り除くでしょう。

2
Spencer Rathbun

use -s ex:seq -s '' 1 10 output:1 2 3 4 5 6 7 8 9 10

0
lantian0811