在 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/