我至少知道在shell脚本中测试条件的4种方法。
[ <cond> ];
[[ <cond> ]];
(( <cond> ));
test <cond>;
我想全面了解这些方法之间的区别,以及何时使用哪种方法。
我尝试在网上搜索摘要,但没有找到任何体面的东西。在某个地方有一个像样的清单会很棒(堆栈溢出来救援!)。
答案 0 :(得分:1)
在链接here的网站上,如果向下滚动到[
特殊字符,您会看到[[
的单独条目,其中包含对两者之间差异的讨论的链接他们。还有((
以下的条目。希望有所帮助!
答案 1 :(得分:1)
我们在这里描述一下。
首先,基本上有3种不同的测试方法
[ EXPRESSION ]
,与test EXPRESSION
[[ EXPRESSION ]]
(( EXPRESSION ))
,与let "EXPRESSION"
让我们进入细节:
test
这是测试命令的祖父。即使你的shell不支持它,几乎每个unix系统上仍然有一个/usr/bin/test
命令。所以调用test
将运行内置函数或二进制文件作为回退。输入$ type test
以查看使用的版本。同样适用于[
。
在大多数基本情况下,这应该足以进行测试。
if [ "$a" = test -o "$a" = Test ];
if test "$a" = test -o "$a" = Test;
如果你需要更多的力量,那么......
[[]]
这是一个特殊的bash。并非每个shell都需要支持这一点,并且没有二进制回退。它提供了更强大的比较引擎,特别是pattern matching和正则表达式匹配。
if [[ "$a" == [Tt]es? ]]; # pattern
if [[ "$a" =~ ^[Tt]es.$ ]]; # RE
(())
这是用于算术表达式的bash特殊值,如果计算结果非零,则为true。并非每个shell都需要支持这一点,并且没有二进制回退。
if (( x * (1 + x++) ));
if let "x * (1 + x++)";
请注意,在引用$
或(( ... ))
中的变量时,您可以省略let
符号。