我正在尝试执行以下操作:
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)
我正在做的事情显然是错误的,但我如何让它按预期工作?
您正在寻找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)
for ((i=0; i<CPU_COUNT; i++))
Run Code Online (Sandbox Code Playgroud)
另一个优点是没有叉子。
从bash手册:
序列表达式采用{x..y [.. incr]}形式,其中x和y是整数或单个字符,incr是可选的增量,是整数.
所以bash不支持序列表达式中的变量.您可以使用for循环代替:
for ((i=1; i<=n; i++)); do ...
Run Code Online (Sandbox Code Playgroud)