() 的三种用法①命令组。语法为 (command),其中的命令会在新开的子 Shell 中依次执行。a=1(a=2 ; echo $a)echo $a运行结果为:21题外话——() 与 {} 的区别
()
的三种用法
①命令组。语法为 (command)
,其中的命令会在新开的子 Shell 中依次执行。
a=1(a=2 ; echo $a)echo $a
运行结果为:
21
题外话——()
与 {}
的区别:
(cmd1 ; cmd2 ; cmd3)
是在子 Shell 中顺序执行;{ cmd1; cmd2; cmd3; }
是在当前 Shell 中顺序执行。在括号中的重定向符号只影响特定命令,在括号外的重定向符号影响全部命令。
②命令替换。语法为 $(command)
,替代传统的 “`command`”,可能有 Shell 不支持。
命令替换是指 Shell 会预先扫描一遍脚本,发现命令替换的结构,将其中的命令执行一次,得到其标准输出,再将此输出放到原来命令替换的位置,执行替换后的脚本。
$()
比 “``” 在设计上引入了两点改进:
- 不再转义其中的
/x
- 允许嵌套
题外话——$()
与 ${}
的区别:前者是命令替换,后者是变量替换。
③数组初始化。语法为 arr=(e1 e2 e3)
。
(())
的两种用法
①整数扩展。只要符合C语言中的运算规则即可,不支持浮点数!。
其中的变量名可以不加 $
前缀。
对 for
、while
、if
命令进行了扩展,可协同使用。
((expr))
结构计算一个算术表达式的值,非 0 视为真,退出状态码 0,0 视为假,退出状态码 1。
$ a=0; ((++a)) && echo True || echo FalseTrue$ a=0; ((a++)) && echo True || echo FalseFalse
②使用 $((expr))
来获取表达式的值,注意这不是命令替换的语法!
a=1$ echo $((a+1))2