我正在尝试执行以下操作:
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}
我正在做的事情显然是错误的,但我如何让它按预期工作?
答案 0 :(得分:5)
答案 1 :(得分:5)
来自bash manual:
序列表达式采用{x..y [.. incr]}的形式,其中x和y是 整数或单个字符,incr,可选的增量, 是一个整数。
所以bash不支持序列表达式中的变量。您可以改为使用for
循环:
for ((i=1; i<=n; i++)); do ...
答案 2 :(得分:4)
您正在寻找seq
。
for core in $(seq 0 $CPU_COUNT); do
编辑:您可以使用getconf(1)获取可用的CPU数量:
CPU_COUNT=$(getconf _NPROCESSORS_ONLN 2>/dev/null)
答案 3 :(得分:1)
使用此语法( zsh , ksh93 和 bash 特定)语法:
for ((core = 0; ++core <= ${CPU_COUNT:-0};)); do
echo $core
done
你也可以使用 eval ,但这很难看。