为什么我不能匹配字符串?

时间:2019-03-16 14:49:52

标签: bash shell

我的代码:

# (1)
#result='/usr/bin/which: no commandName in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/wks/.local/bin:/home/wks/bin)'

# (2)
result=`which commandName`

echo $result

reg='commandName'

if [[ $result =~ $reg  ]]
then echo "exit"
else echo "not exit"
fi

如果我使用代码(2),将打印not exit,但是如果我使用代码(1),它将打印exit

但是which commandName将在我的PC中获得相同的内容,它是

/usr/bin/which: no commandName in (/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/wks/.local/bin:/home/wks/bin)

那行为不同的原因是什么?

2 个答案:

答案 0 :(得分:0)

问题在于,在您的代码(2)中,result最终为空。

/usr/bin/which: no commandName ...是错误消息,因此已写入stderr。反引号(例如`which ...`)仅捕获标准输出,而不捕获错误。

如果要同时捕获stdout和stderr,请执行类似的操作

result=$(which commandName 2>&1)

答案 1 :(得分:-1)

在bash中,在变量$?之后的行中使用?要检查最后一个命令如何结束(即“哪个”),第二个测试仅在返回码为0的情况下执行,所以代码1表示该命令失败。

res=`which asasa`
if [[ $? -eq 0 ]]
then
#etc.
相关问题