Bash 为什么可以';我配不上绳子?
我的代码:Bash 为什么可以';我配不上绳子?,bash,shell,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 "ex
# (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),它将打印而不是退出
,但是如果我使用代码(1),它将打印退出
但是,哪个commandName
将在我的电脑中获得相同的内容,它是
/usr/bin/which:no commandName in(/usr/local/bin:/usr/local/sbin:/usr/local/sbin:/usr/sbin:/home/wks/.local/bin:/home/wks/bin)
那么,不同行为的原因是什么呢?在bash中,在下面的行中使用哪个变量$?要检查最后一个命令是如何结束的,即“which”,并且第二个测试仅在返回代码为0时执行,代码1表示命令失败
res=`which asasa`
if [[ $? -eq 0 ]]
then
#etc.
问题在于,在代码(2)中,
结果
最终为空
/usr/bin/which:no commandName…
是一条错误消息,因此会写入stderr。反勾号(如`which…`
)只捕获标准输出,而不捕获错误
如果您想同时捕获stdout和stderr,请执行以下操作
result=$(which commandName 2>&1)
``用于执行另一个命令,如:
var=`ls/home/`
。->(2):
假设要做什么,我找不到命令。我知道这是可行的,但我想知道为什么我提到的代码不起作用,因为结果包含一个字符串“/usr/bin/:其中没有commandName(/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/wks/.local/bin:/home/wks/bin)”不是您期望的字符串“commandName”。但我使用=~。这意味着字符串是否包含正确的stringw bash=~意味着stringA与stringb不对应,但如果我使用代码(1)将值“/usr/bin/which:no commandName in…”赋给$result,它将打印“exit”,这意味着contains right,带有echo$result,我确实看到了一行空白