gpt4 book ai didi

bash:将结果分配给变量时换行符计数不同

转载 作者:行者123 更新时间:2023-11-29 09:12:52 24 4
gpt4 key购买 nike

<分区>

假设我想查看有多少个程序副本已经在运行。我可以这样做:

ps ax | grep -c "$0"

该命令本身会产生预期的结果。但是,如果我尝试将输出分配给一个变量,它就会递增 1!无论我如何尝试:

var=$(ps ax | grep "$0" | sed -n '$=')
var=`ps ax | grep -c "$0"`

有人可以告诉我捕获正确输出的正确方法吗?

也很高兴知道为什么会发生这种情况..

更新在@fedorqui 的第一次回应后,我意识到我不够清楚。让我详细说明:

我在同一个 bash 脚本中运行上面的所有三个命令。当我运行第一个时,它打印出数字 2:程序本身和以该程序作为参数的 grep 进程。当我在变量赋值中运行这些相同的命令时,数字 3 被存储。

请注意,我使用两种不同的方法来计算行数,grep 和 sed。在这两种情况下,它们都返回 3 而不是正确答案 2。

这是一个综合示例,可以在 test.sh 文件中尝试:

echo -n "without assignment: "
ps ax | grep -c "$0"
var=$(ps ax | grep "$0" | sed -n '$=')
echo "using sed method: $var"
var=`ps ax | grep -c "$0"`
echo "using grep method: $var"

我的 debian 机器上的结果:

without assignment: 2
using sed method: 3
using grep method: 3

问题又来了:为什么会发生这种情况,如何预防或解决?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com