2011-10-27 9 views
2

を行って、私は次のことをやろうとしている:4つのコアのシステムで

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 

、私は0から3

に出力をコアをインクリメント、ループに4回bashスクリプトを期待します私が受け取るしかし、次のとおりです。私は何をやっている

{0..3} 

は明らかに間違っているが、どのように私は意図したとおりにそれを動作させるのですか?

答えて

3

あなたはseqを探しています。

for core in $(seq 0 $CPU_COUNT); do 
+0

ありがとう、ありがとう。それはまた非常にpythonic見える:) –

4

Bash is not parsed that way;追加の利点は、フォークの欠如である

for ((i=0; i<CPU_COUNT; i++)) 

を使用しています。この

+0

ありがとう!しかし、なぜ二重括弧? –

+2

[二重カッコ](http://www.gnu.org/software/bash/manual/bashref.html#Conditional-Constructs)は算術評価マーカーです。 –

1

使用(zshのは、ksh93bashの特定)構文は:

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

またevalのを使用することができますが、それは醜いだろう。 bash manualから

5

配列の発現は、x及びyは いずれかの整数または単一文字であるフォーム{x..y [.. INCR]}、およびINCR、任意の増分を取り、 は整数です。

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

for ((i=1; i<=n; i++)); do ... 
関連する問題