linux中shell的小括号、大括号的用法区别


Linux中小括号()和大括号{}都是对其中的一串命令进行执行,但有一定的区别,其区别如下:



1 小括号()


①命令组。括号中的命令新开一个子shell程序,括号中的变量为本地变量 ,不能够在脚本其他部分使用。括号中多个命令之间用分号隔开。

备注:
在括号中的变量,由于是在子shell中,所以对于脚本剩下的部分是不可用的. 
父进程, 也就是脚本本身, 将不能够读取在子进程中创建的变量, 也就是在子shell中创建的变量.
(cmd1;cmd2;cmd3)


②命令替换。命令替换$(cmd)等同于`cmd`(这不是单引号,`是ESC下面的那个键) ,shell执行过程中发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其输出,再将此输出放到原来命令。例如:


[root@localhost tmp]# ls


fstab  functions  hellobash  issue  mytestdir  scripts


[root@localhost tmp]# echo $(ls)


fstab functions hellobash issue mytestdir scripts


[root@localhost tmp]# echo `ls`


fstab functions hellobash issue mytestdir scripts


[root@localhost tmp]# 


③用于初始化数组。如:arr=(m n)





2 大括号


①拓展。对大括号中的文件名做扩展。在大括号中,不允许有空白,除非这个空白被引用或转义。拓展分为普通以逗号(,)进行拓展,如echo {a,b}.txt将间隔的各项内容均列出;已两个点(..)进行拓展,如echo {1..5}.txt自动补全1到5中间内容。


[root@localhost ~]# echo {a,b}.txt


a.txt b.txt


[root@localhost ~]# echo {1..5}.txt


1.txt 2.txt 3.txt 4.txt 5.txt


[root@localhost ~]# 


②内部组 。与小括号中的命令不同,大括号内的命令在当前shell运行,不会重新开子shell。
括号内的命令间用分号隔开,最后一个命令后必须跟分号。{}的第一个命令和左括号之间必须要有一个空格。





3 (( ))
  
(( ... ))结构可以用来计算并测试算术表达式的结果. 退出状态将会与[ ... ]结构完全相反!还可应用到c风格的for,while循环语句,(( )) 中,所有的变量(加不加$无所谓)都是数值。


$((...))结构的表达式是C风格的表达式,其返回的结果是表达式值,其中变量引用可不用‘$’(当然也可以)


for((...;...;...))
do
  cmd
done


while ((...))
do
  cmd
done


比较操作符


<


    小于


    (("$a" < "$b"))
<=


    小于等于


    (("$a" <= "$b"))
>


    大于


    (("$a" > "$b"))
>=


    大于等于


    (("$a" >= "$b"))


(( 0 ))
echo "Exit status of `(( 0 ))` is $?."         # 1
   
(( 1 ))
echo "Exit status of `(( 1 ))` is $?."         # 0


(( 5 > 4 ))                                      # 真
echo "Exit status of `(( 5 > 4 ))` is $?."     # 0


(( 5 > 9 ))                                      # 假
echo "Exit status of `(( 5 > 9 ))` is $?."     # 1


(( 5 - 5 ))                                      # 0
echo "Exit status of `(( 5 - 5 ))` is $?."     # 1


(( 5 / 4 ))                                      # 除法也可以.
echo "Exit status of `(( 5 / 4 ))` is $?."     # 0


(( 1 / 2 ))                                      # 除法的计算结果 < 1.
echo "Exit status of `(( 1 / 2 ))` is $?."     # 截取之后的结果为 0.
                                                  # 1
or ((a=1; a <= LIMIT ; a++))  # 双圆括号, 并且"LIMIT"变量前面没有"$".
do
   echo -n "$a "
done


while (( a <= LIMIT ))   # 双圆括号, 变量前边没有"$".
do
   echo -n "$a "
   ((a += 1))   # let "a+=1"
done


a=2
b=$(($a*4))     #a=2 b=8
c=$((a*3))      #a=2 c=6











总结:


()会开启一个新的子shell,{}不会开启一个新的子shell

(())常用于算术运算比较,[[]]常用于字符串的比较.

$()返回括号中命令执行的结果

$(())返回的结果是括号中表达式值

${ }参数替换与扩展













本文转自:

http://blog.csdn.net/damotiansheng/article/details/44196769

https://jingyan.baidu.com/article/676629977eddbb54d41b8454.html


你可能感兴趣的:(SHELL,linux,shell,命令执行)