任何人都可以告诉我这个脚本在.sh
文件中的含义是什么:
[ ! -n "$T_R" ] && echo "Message Appear" && exit 1;
答案 0 :(得分:2)
编辑:纠正由tripleee指出的错误信息
括号[ ]
是'test'的别名,它测试是否满足条件。不要使问题复杂化,但请注意,这与bash shell关键字[[ ]]
是分开的(谢谢,tripleee用于清除它!)。请参阅This post for further details.这些天,大多数人似乎都使用后者,因为它具有更强大的功能集。
在括号之间,脚本正在测试以确定变量"$T_R"
是否为空字符串。
-n
运算符返回true。 !
反转案例(如果结果则测试成功
真强>)。所以在这种情况下,如果test
的长度为"$T_R"
则超过(返回0)
字符串变量&&
**不是非零**(即如果是
变量是一个空字符串,或者是不存在的。)双号& "$T_R"
运算符表示只有在成功的情况下才执行后续代码,因此只有在测试成功的情况下才会回显消息“Message Appear” (再次,如果&& exit 1
为空或未设置)。
最后,bash
表示在成功回显消息显示消息后退出返回状态1。
test
和{{1}}手册页对所有这些主题都非常有帮助,有关详细信息,请参阅。
答案 1 :(得分:1)
链式&&
是一种常见的短路习语。
而不是写
if true; then
if true; then
echo moo
fi
fi
您可以缩写为true && true && echo moo
。
echo
通常会成功,因此如果true && echo moo && exit 1
成功,echo
和exit
都会同时执行(显然它总是会这样)。
(可能会出现true
失败的极端情况,但如果发生这种情况,无论如何都要干杯,所以我认为不要试图防范这些事情。)
echo
是[
的别名,它是shell脚本的一般比较助手(在Bash中,它甚至是内置的)。 test
检查字符串是否为非空。
test -n
是一般否定运算符,因此它将测试反转为检查空字符串。
(这有点单一,因为有一个单独的!
专门检查字符串是否为空。)