您的位置:首页 > 运维架构 > Shell

认识 Shell 脚本里的小括号们——分析“()”与“(())”的区别

2016-12-16 00:00 288 查看

()
的三种用法

①命令组。语法为
(command)
,其中的命令会在新开的子 Shell 中依次执行。

a=1
(a=2 ; echo $a)
echo $a

运行结果为:

2
1

题外话——
()
{}
的区别:

(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 False
True
$ a=0; ((a++)) && echo True || echo False
False

②使用
$((expr))
来获取表达式的值,注意这不是命令替换的语法!

a=1
$ echo $((a+1))
2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Shell