Linux脚本编程Shell中关于 () 和 {}的区别
Posted 白-胖-子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux脚本编程Shell中关于 () 和 {}的区别相关的知识,希望对你有一定的参考价值。
小括号和花括号的作用
- 在bash中,小括号(CMD1;CMD2;…)和 花括号{ CMD1;CMD2;…; } 都可以将多个命令组合在一起,批量执行
(list) list is executed in a subshell environment (see COMMAND EXECUTION ENVIRONMENT below).
Variable assignments and builtin commands that affect the shell's environment do not remain in effect after the command completes.
The return status is the exit status of list.
{ list; } list is simply executed in the current shell environment. list must be terminated with a newline or semicolon.
This is known as a group command. The return status is the exit status of list.
Note that unlike the metacharacters ( and ), { and } are reserved words and must occur where a reserved word is permitted to be recognized.
Since they do not cause a word break, they must be separated from list by whitespace or another shell metacharacter.
- 这里要特别注意,花括号是有格式要求的
{ list; }
- 花括号的前后都需要有空格,并且每一项内容必须使用分号;结束,否则报错`
小括号和花括号的区别
( list ) 小括号
- 会开启子shell进程,并且list中变量赋值及内部命令执行后,将不再影响后续的环境
- 帮助参看:man bash 搜索(list)
{ list; } 花括号
- 不会新开启子shell进程, 在当前shell中运行,会影响当前shell环境
- 帮助参看:man bash 搜索{ list; }
示例
- 将变量Name的值设为Linux
- 括号中的命令同时执行
2.1 显示变量Name的值
2.2 重新赋值Name为CentOS
2.3 再次显示变量Name的值 - 显示变量Name的值
使用小括号赋值变量并显示
#Name=Linux;(echo $Name;Name=CentOS;echo $Name);echo $Name
Linux
CentOS
Linux
- 因为小括号中的变量赋值只在新开启的子shell中生效
- 所以最后一次echo的值仍然显示当前shell变量值
使用花括号赋值并显示
#Name=Linux;{ echo $Name;Name=CentOS;echo $Name; } ;echo $Name
Linux
CentOS
CentOS
- 因为花括号不会开启新的子shell进程
- 所以花括号中的变量赋值会影响当前shell变量值
以上是关于Linux脚本编程Shell中关于 () 和 {}的区别的主要内容,如果未能解决你的问题,请参考以下文章
Linux-shell-算术运算{exprbcdc(( ))和[ ]}