理解if中括号和括号的使用

时间:2015-07-02 10:18:26

标签: linux shell unix if-statement

在我经历的一些代码中,我发现if正在某处使用大括号 {}括号 {{1}对于其他一些人。有人可以告诉我确切的含义以及在哪个地方使用哪一个?

(())

1 个答案:

答案 0 :(得分:0)

括号Last是shell的内置命令;您也可以将其称为[

test

等于:

if [ a = b ]
then ...

if test a = b then ... 命令的语法非常注重文本(有关详细信息,请参阅bash手册页test)。

大括号CONDITIONAL EXPRESSIONS是shell语法,用于分组命令(不创建子shell):

{…}

这将执行{ date; ls; echo $$; } > 1>&2 datels并将其所有输出重定向到stderr。

括号echo $$是shell语法,用于创建子shell:

(…)

如上所述,但给出的PID((date; ls; echo $$) > 1>&2 )是子壳的。

分组和子shell之间的区别很微妙(这里超出了范围)。

加倍括号$$是shell语法,但其他行为与单括号[[…]]命令相同。唯一的区别是使用[等进行字符串比较和语言环境支持。

加倍括号<等同于使用((…))内置shell命令。它们基本上允许评估面向数字的表达式(let)。 ARITHMETIC EVALUATION<按数字排序(而不是按字典顺序排列)等。此外,在某些结构中,如>,它们将被用作固定语法。

Dollar-括号for ((i=0; i<10; i++)); do echo "$i"; done会导致它们包含的命令的输出

$(…)

美元括号echo "$(date)" # a complicated way to execute date 已被弃用,应以美元双括号替换。

Dollar-double-parentheses $[…]导致它们包含的数值表达式的值:

$((…))

Dollar-braces echo "$((4 + 3 * 2))" # should print 10 会导致它们包含的变量扩展。在最简单的情况下,这只是一个变量名,然后它们计算变量值:

${…}

这可以(通常是)缩写括号:a=foo echo "${a}" # prints foo

但它也可能比$a更复杂。有关详细信息,请参阅bash手册页中的${a:-"today is $(date)"}

重定向 - 括号Parameter Expansion<(…)创建子进程,与其输出/输入关联的文件描述符,以及与该描述符关联的伪文件。它可用于将程序的输出作为表面文件传递给另一个程序:>(…)