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,我确实看到了一行空白