我的代码:
# (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) 中,result
最终为空。
/usr/bin/which: no commandName ...
是一条错误消息,因此写入 stderr。反引号(如`which ...`
)只捕获标准输出,而不是错误。
如果您想同时捕获 stdout 和 stderr,请执行以下操作
result=$(which commandName 2>&1)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句