shell中的true和false值

Joh*_*ohn 8 unix shell

我在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
Run Code Online (Sandbox Code Playgroud)

我得到了这些结果.

0是真的.1是真的.错是真的.的确如此.

Jon*_*ler 11

测试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
Run Code Online (Sandbox Code Playgroud)

大多数机器没有所谓的命令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
Run Code Online (Sandbox Code Playgroud)

在第7版Unix中,/bin/test(或可能/usr/bin/test)是测试程序,但您通常会找到一个链接/bin/[.当它被名称调用时[,它要求它的最后一个参数是],所以你可以写一个方形括号条件.

不久之后,该/bin/[操作内置于shell中,而不是单独的可执行文件,但语义基本保持不变.因为它们现在不同(内置与可执行文件),有时测试操作具有不同的功能.POSIX定义了一个基线; 各种外壳和系统提供各种扩展.

到目前为止,该/usr/bin/[套件建议使用testover autoconf,但这是因为它使用方括号用于其他目的.


Ign*_*ams 5

[是一个命令.如果传递非零长度字符串,则返回true.如果要运行truefalse命令,请不要运行[命令.

  • `test` 和 `[` 是同一件事。如果您需要测试单个命令的返回值为零或非零,请不要使用它们。 (2认同)