我正在使用以下命令尝试最大化我的服务器上的核心数量:
for i in {1..`nproc --all`}; do while : ; do : ; done & done
由于某种原因,它只使用一个核心,尽管我的服务器有两个核心。如果我尝试用 替换`nproc --all`
,2
它工作正常。为什么会这样?
答案1
括号扩展发生在命令替换之前。以下片段
{1..`nproc --all`}
根本不会扩展为括号。当命令替换扩展为 时2
,它变为
{1..2}
但现在进行括号扩展已经太晚了。同样的问题将是如果你在那里使用了一个变量。
此语法有效:
for ((i=1; i<=`nproc --all`; i++)); do echo "$i"; done
或者
for i in $(seq 1 "$(nproc --all)"); do echo "$i"; done
根据需要调整循环。请注意,在最后一种情况$(…)
下,我使用了`…`
因为这种形式很容易嵌套。