对于 {1..$VAR} 中的 i;回显 $i;完毕

发布于 2024-12-12 03:11:52 字数 328 浏览 0 评论 0原文

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

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}

我所做的显然是错误的,但我怎样才能让它按预期工作呢?

I'm trying to do the following:

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

On a system with 4 cores, I would expect the bash script to loop 4 times, incrementing core from 0 to 3.

The output I receive is however:

{0..3}

What I'm doing is clearly wrong, but how do I make it work as intended?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

挖个坑埋了你 2024-12-19 03:11:52

Bash 不是这样解析的;使用的

for ((i=0; i<CPU_COUNT; i++))

另一个优点是没有叉子。

Bash is not parsed that way; use

for ((i=0; i<CPU_COUNT; i++))

An additional advantage is the lack of a fork.

聽兲甴掵 2024-12-19 03:11:52

您正在寻找seq

for core in $(seq 0 $CPU_COUNT); do 

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

CPU_COUNT=$(getconf _NPROCESSORS_ONLN 2>/dev/null)

You are looking for seq.

for core in $(seq 0 $CPU_COUNT); do 

Edit: You can use getconf(1) to get the number of CPU available:

CPU_COUNT=$(getconf _NPROCESSORS_ONLN 2>/dev/null)
白云悠悠 2024-12-19 03:11:52

来自 bash 手册

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

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

for ((i=1; i<=n; i++)); do ...

From the bash manual:

A sequence expression takes the form {x..y[..incr]}, where x and y are
either integers or single characters, and incr, an optional increment,
is an integer.

So bash doesn't support variables in sequence expressions. You can use a for loop instead:

for ((i=1; i<=n; i++)); do ...
昔梦 2024-12-19 03:11:52

使用此(zshksh93bash 特定)语法:

for ((core = 0; ++core <= ${CPU_COUNT:-0};)); do
 echo $core
done

您也可以使用 eval,但这将是丑陋的。

Use this (zsh, ksh93 and bash specific) syntax:

for ((core = 0; ++core <= ${CPU_COUNT:-0};)); do
 echo $core
done

You may also use eval, but that would be ugly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文