gpt4 book ai didi

linux - 理解 if 中大括号和圆括号的使用

转载 作者:太空宇宙 更新时间:2023-11-04 06:00:55 25 4
gpt4 key购买 nike

在我正在查看的一些代码中,我发现 if 在某些地方使用了大括号 {},而在其他地方使用了括号 (())。有人可以告诉我确切的含义以及在哪里使用哪个吗?

if [ "$1" = "--help" ]

if (( $# != 3 ))

最佳答案

支架[是 shell 的内置命令;您也可以将其称为 test :

if [ a = b ]
then ...

等于:

if test a = b
then ...

test 的语法命令是相当面向文本的(有关详细信息,请参阅 bash 手册页 CONDITIONAL EXPRESSIONS 章节)。

大括号{…}是 shell 语法,用于对命令进行分组(不创建子 shell):

{ date; ls; echo $$; } > 1>&2

这将执行date , ls ,和echo $$并将其所有输出重定向到 stderr。

括号(…)是 shell 语法并用于创建子 shell:

(date; ls; echo $$) > 1>&2

与上面类似,但给出的 PID ( $$ ) 是子 shell 的 PID。

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

双括号[[…]]是 shell 语法,但其他方面的行为类似于单括号 [命令。唯一的区别是使用 <等用于字符串比较和区域设置支持。

双括号((…))相当于使用 let内置 shell 命令。它们基本上允许对面向数字的表达式进行求值( ARITHMETIC EVALUATION )。 <>按数字排序(而不是按字典顺序)等。此外,在某些结构中,如 for ((i=0; i<10; i++)); do echo "$i"; done它们被用作固定语法。

美元括号 $(…)结果是它们所包含的命令的输出:

echo "$(date)"  # a complicated way to execute date

美元括号 $[…]已弃用,应替换为美元双括号。

美元双括号 $((…))结果是它们所包含的数值表达式的值:

echo "$((4 + 3 * 2))"  # should print 10

美元大括号 ${…}导致它们包含的变量扩展。在最简单的情况下,这只是一个变量名称,然后它们计算出变量值:

a=foo
echo "${a}" # prints foo

这可以(并且经常)通过去掉大括号来缩写:$a

但它也可以更复杂,例如 ${a:-"today is $(date)"} 。请参阅Parameter Expansion有关详细信息,请参阅 bash 手册页。

重定向括号<(…)>(…)创建一个子进程、与其输出/输入关联的文件描述符以及与该描述符关联的伪文件。它可用于将程序的输出作为看似文件的形式传递给另一个程序: diff <(sleep 1; date) <(sleep 2; date)

关于linux - 理解 if 中大括号和圆括号的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31181885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com