我在shell中读到了 true命令返回0 =>逻辑真实。 false命令返回1 =>逻辑错误。 但是当我跑步时,我得到了惊人的结果。
if [ 0 ]
then
echo "0 is true."
else
echo "0 is false."
fi
if [ 1 ]
then
echo "1 is true."
else
echo "1 is false."
fi
if [ false ]
then
echo "false is true."
else
echo "false is false."
fi
if [ true ]
then
echo "true is true."
else
echo "true is false."
fi
我得到了这些结果。
0是真的。 1是真的。 错是真的。 的确如此。
答案 0 :(得分:10)
测试if [ 0 ]
测试0
是否为空字符串(不是),如果不为空则返回true。测试if [ 1 ]
类似地测试1
是否为空字符串,如果它不为空则返回true。同样,其他两个测试检查字符串true
和false
是否为空......
如果要测试命令,请执行命令:
if false; then echo False is true; else echo False is false; fi
if true ; then echo True is true; else echo True is false; fi
大多数机器没有名为0
或1
的命令,因此您无法轻易将它们作为命令调用。
你也可以试验:
if sh -c "exit 1"; then echo Shell exited as true; else echo Shell exited as false; fi
if sh -c "exit 0"; then echo Shell exited as true; else echo Shell exited as false; fi
在第7版Unix中,/bin/test
(或可能/usr/bin/test
)是测试程序,但您通常会找到链接/bin/[
。当它被名称[
调用时,它要求它的最后一个参数是]
,所以你可以写一个方形括号的条件。
在此之后不久,test
操作内置于shell中,而不是单独的可执行文件,但语义基本保持不变。因为它们现在不同(内置与可执行文件),有时测试操作具有不同的功能。 POSIX定义了一个基线;各种外壳和系统提供各种扩展。
到目前为止,autoconf
套件建议使用test
而不是[
,但这是因为它使用方括号用于其他目的。
答案 1 :(得分:5)
[
是一个命令。如果传递非零长度字符串,则返回true。如果要运行true
或false
命令,请不要运行[
命令。
答案 2 :(得分:-1)
#!/bin/ksh
echo "test-1 \"var is undefined\" if [ "\$var" ] "
if [ "$var" ] ; then
echo "\"$var\" is true"
else
echo "\"$var\" is false"
fi
echo
echo "test-2 \"var=\" (not set to a value) if [ "\$var" ] "
var=
if [ "$var" ] ; then
echo "\"$var\" is true"
else
echo "\"$var\" is false"
fi
echo
echo "test-3 \"var=0\" if [ "\$var" ] "
var=0
if [ "$var" ] ; then
echo "\"$var\" is true"
else
echo "\"$var\" is false"
fi