关键字"if"如何测试值是否为false?

kit*_*ang 10 bash shell ubuntu

在bash脚本中

if [ 1 ]
then
   echo "Yes"
else
   echo "No"
fi
Run Code Online (Sandbox Code Playgroud)

输出: Yes

它表示'1'被视为真值.

但在代码中:

word = Linux
letter = nuxi
if echo "$word" | grep -q "$letter"
then
    echo "Yes"
else
    echo "No"
fi
Run Code Online (Sandbox Code Playgroud)

输出:没有

但是No会返回1,为什么结果是否

关键字如何echo "$word" | grep -q "$letter"测试命令返回的值后No

Lek*_*eyn 13

检查命令的返回值.[ 1 ]的返回值为0(true).任何其他返回值(如1)表示错误.

您可以使用$?变量显示上次执行的命令的返回值:

true
echo $?
# returned 0
false
echo $?
# returned 1
echo $?
# returned 0 as the last executed command is 'echo', and not 'false'
Run Code Online (Sandbox Code Playgroud)

  • `[1]`或`[0]`求值为true,因为`test` /`[`with single parameter只检查参数字符串(这里是`1`或'0`)是否为非空.哇`[""]`是假的. (5认同)

Nic*_*ick 9

在unix land中,0为真,1为假.

第一个例子:

if [ 1 ]
then
   echo "Yes"
else
   echo "No"
fi
Run Code Online (Sandbox Code Playgroud)

"If"检查给定命令的退出代码是否为true/false(即零/非零).

方括号实际上调用了"test"命令(有关更多信息,请参阅"man test")并将退出代码提供给if.

"test 1"(或实际上"test any_string")返回true(0),因此输出"Yes".

对于你的第二个例子,这输出"No",因为在"Linux"中找不到"nuxi",如果你将"nuxi"改为"nux"(也许这是一个错字?)并删除=周围的空格然后你会得到你期望的行为.例如

word=Linux
letter=nux
if echo "$word" | grep -q "$letter"
then
    echo "Yes"
else
    echo "No"
fi
Run Code Online (Sandbox Code Playgroud)