我的代码:
# (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)
那行为不同的原因是什么?
答案 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.