在我经历的一些代码中,我发现if
正在某处使用大括号 {}
而括号 {{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
,date
和ls
并将其所有输出重定向到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
和<(…)
创建子进程,与其输出/输入关联的文件描述符,以及与该描述符关联的伪文件。它可用于将程序的输出作为表面文件传递给另一个程序:>(…)