{1 .. $ VAR}の私のために; echo $ iを実行します。完了

私は次のことをしようとしている:

CPU_COUNT=$(cat /proc/stat | grep -E "^cpu[[:digit:]]+ " | wc -l)
let CPU_COUNT=CPU_COUNT-1
for core in {0..$CPU_COUNT}; do
 echo $core
done

4つのコアを持つシステムでは、bashスクリプトが4回ループし、コアを0から3に増やすことが期待されます。

しかし私が受け取る出力は:

{0..3}

私がやっていることは明らかに間違っていますが、それを意図どおりに機能させるにはどうしたらいいですか?

2

4 答え

bashマニュアルから:

シーケンス式は、{x..y [.. incr]}という形式をとります。ここで、xとyは   整数または単一文字のいずれか、およびincr、オプションのインクリメント、   整数です。

したがって、bashはシーケンス式の変数をサポートしていません。代わりに for ループを使用することができます:

for ((i=1; i<=n; i++)); do ...
5
追加された

Bash is not parsed that way; use

for ((i=0; i

追加の利点は、フォークの欠如である。

4
追加された
二重括弧は算術評価マーカーです。
追加された 著者 glenn jackman,
ありがとう!しかし、なぜ二重括弧?
追加された 著者 Dog eat cat world,

seq を探しています。

for core in $(seq 0 $CPU_COUNT); do 
3
追加された
まことにありがとうございます。それはまた非常にpythonic見える:)
追加された 著者 Dog eat cat world,

この( zshksh93bash )の構文を使用してください:

for ((core = 0; ++core <= ${CPU_COUNT:-0};)); do
 echo $core
done

eval を使用することもできますが、それは醜いでしょう。

1
追加された