shell中的true和false值

时间:2011-06-22 07:11:08

标签: shell unix

我在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是真的。 错是真的。 的确如此。

3 个答案:

答案 0 :(得分:10)

测试if [ 0 ]测试0是否为空字符串(不是),如果不为空则返回true。测试if [ 1 ]类似地测试1是否为空字符串,如果它不为空则返回true。同样,其他两个测试检查字符串truefalse是否为空......

如果要测试命令,请执行命令:

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

大多数机器没有名为01的命令,因此您无法轻易将它们作为命令调用。

你也可以试验:

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。如果要运行truefalse命令,请不要运行[命令。

答案 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