在bash脚本中
if [ 1 ] then echo "Yes" else echo "No" fi
输出: Yes
它表示'1'被视为真正的价值。
但在代码中:
word = Linux letter = nuxi if echo "$word" | grep -q "$letter" then echo "Yes" else echo "No" fi
输出:没有
但echo "$word" | grep -q "$letter"
echo "$word" | grep -q "$letter"
将返回1,为什么结果是否定的
如果在if
testing命令返回的值,关键字如何?
检查命令的返回值。 [ 1 ]
的返回值为0
(真)。 任何其他返回值(如1
)表示一个错误。
您可以使用$?
显示上次执行的命令的返回值 变量:
true echo $? # returned 0 false echo $? # returned 1 echo $? # returned 0 as the last executed command is 'echo', and not 'false'
在unix地区,0是真的,1是假的。
举个例子:
if [ 1 ] then echo "Yes" else echo "No" fi
“If”检查给定命令的退出码是否为真/假(即零/非零)。
方括号实际上调用了“test”命令(参见“man test”以获取更多信息)并将退出代码赋给if。
“测试1”(或者确实是“测试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
这是因为grep未能在$ word中找到$字母,因此退出代码是1.每当linux中的进程返回0以外的代码时,就意味着它失败了。 0表示成功退出。 你可以用echo "Linux" | grep -d "nuxi"; echo $?
来验证 echo "Linux" | grep -d "nuxi"; echo $?
另一方面,在脚本世界中,0代表虚假,1代表真实。 所以grep找不到这个单词,并把1作为退出代码发送给if,把它当作一个真正的值。