我在{1 .. $ VAR}; 回声$ i; DONE

Dog*_*rld 3 bash for-loop

我正在尝试执行以下操作:

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
Run Code Online (Sandbox Code Playgroud)

在具有4个内核的系统上,我希望bash脚本循环4次,将核心从0递增到3.

然而,我收到的输出是:

{0..3}
Run Code Online (Sandbox Code Playgroud)

我正在做的事情显然是错误的,但我如何让它按预期工作?

Aif*_*Aif 5

您正在寻找seq.

for core in $(seq 0 $CPU_COUNT); do 
Run Code Online (Sandbox Code Playgroud)

编辑:您可以使用 getconf(1) 来获取可用 CPU 的数量:

CPU_COUNT=$(getconf _NPROCESSORS_ONLN 2>/dev/null)
Run Code Online (Sandbox Code Playgroud)


l0b*_*0b0 5

Bash不能以这种方式解析;使用

for ((i=0; i<CPU_COUNT; i++))
Run Code Online (Sandbox Code Playgroud)

另一个优点是没有叉子。

  • [双括号]是算术评估标记。 (2认同)

Eug*_*ash 5

bash手册:

序列表达式采用{x..y [.. incr]}形式,其中x和y是整数或单个字符,incr是可选的增量,是整数.

所以bash不支持序列表达式中的变量.您可以使用for循环代替:

for ((i=1; i<=n; i++)); do ...
Run Code Online (Sandbox Code Playgroud)