2011-10-27 75 views
2

我試圖做到以下幾點:

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} 

我在做什麼顯然是錯誤的,但是如何使它按預期工作?

回答

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的ksh93的慶典具體)語法:

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

您也可以使用EVAL,但是這將是醜陋的。

5

bash manual

序列表達式的形式爲{x..y [.. INCR]},其中x和y是 任一整數或單個字符,INCR,任選的增量, 是一個整數。

所以bash不支持序列表達式中的變量。您可以使用for循環代替:

for ((i=1; i<=n; i++)); do ... 
相關問題