Bash:将命令替换的输出分配给整数变量

标签 bash

在 Bash 中,我需要一个整型变量,如下所示:

declare -i n_jobs

要分配为当前后台作业数的值:

jobs | wc -l

如果我这样分配它:

n_jobs=$(jobs | wc -l)

似乎是一个工作整数,例如:

echo $((++n_jobs))

但是...打印它(不运行上面的增量)提醒我它包含空白:

$ echo "$n_jobs"
$ <space><space><space><space><space>4

所以我求助于这个结构:

n_jobs=$(( $(jobs | wc -l) ))

强制立即“转换”为 int

有没有更好的方法来获取命令替换列表的输出并将其作为整数分配给变量?

最佳答案

仍然是 bash 特定的,但是获取无空格整数的更简洁的方法可能是:

job_pids=( $(jobs -p) )
n_jobs=${#job_pids[@]}

符合 POSIX 标准的版本:

n_jobs=$( jobs -p | awk '{print NR}' )

(-p 不是必需的,但您实际上只需要为每个作业提供一个唯一的行来提供给 awk,所以也可以使行尽可能简短。)

关于Bash:将命令替换的输出分配给整数变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15605494/

相关文章:

regex - 仅当字符串存在于特定列中时才打印行

linux - 如何 move 和编号文件?

linux - Logrotate 脚本未运行

bash - IF 没有测试标志?

linux - bash - 编写函数语法的两种方式

bash - 我可以使用 stat 来显示人类可读的文件大小吗?

linux - 循环读取 bash 文件中的多个查询

bash - 在 docker 命令中转义撇号

linux - 从某个文件 1 中剪切列,粘贴到文件 2 并将结果写入文件 2

linux - 命令行(甚至以编程方式)检索图像的一部分