我試圖做到以下幾點:
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}
我在做什麼顯然是錯誤的,但是如何使它按預期工作?
我試圖做到以下幾點:
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}
我在做什麼顯然是錯誤的,但是如何使它按預期工作?
您正在尋找seq
。
for core in $(seq 0 $CPU_COUNT); do
謝謝!但爲什麼是雙括號? –
[雙括號](http://www.gnu.org/software/bash/manual/bashref.html#Conditional-Constructs)是算術評估標記。 –
使用此(zsh的,ksh93的和慶典具體)語法:
for ((core = 0; ++core <= ${CPU_COUNT:-0};)); do
echo $core
done
您也可以使用EVAL,但是這將是醜陋的。
序列表達式的形式爲{x..y [.. INCR]},其中x和y是 任一整數或單個字符,INCR,任選的增量, 是一個整數。
所以bash不支持序列表達式中的變量。您可以使用for
循環代替:
for ((i=1; i<=n; i++)); do ...
非常感謝。它也看起來非常pythonic :) –