shell中()、(())、[]、[[]]、{}的作用

  • $()和

    在 bash shell 中,$( ) 与(反引号) 都可用做命令替换用。

  • ${ }

    用于变量替换。一般情况下,$var 与${var} 并没有什么不一样,但是用 ${ } 会比较精确的界定变量名称的范围。

    ${ }的模式匹配功能:
    # 是去掉左边(在键盘上#在$之左边)
    % 是去掉右边(在键盘上%在$之右边)
    #和%中的单一符号是最小匹配,两个相同符号是最大匹配。
    第一种模式:
    ${variable%pattern},这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,
    如果是,就从命令行把variable中的内容去掉右边最短的匹配模式

    [root@root shell]# var=testcase
    [root@root shell]# echo $var
    testcase
    [root@root shell]# echo ${var%s*e} 从最右边删除最短匹配
    testca
    

    第二种模式:
    ${variable%%pattern},这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,
    如果是,就从命令行把variable中的内容去掉右边最长的匹配模式

    [root@root shell]# echo $var
    testcase
    [root@root shell]# echo ${var%%s*e} 从最右边删除最长匹配
    te
    [root@root shell]# echo $var  变量没有改变
    testcase
    

    第三种模式:
    ${variable#pattern} 这种模式时,shell在variable中查找,看它是否一给的模式pattern开始,
    如果是,就从命令行把variable中的内容去掉左边最短的匹配模式

    [root@root shell]# echo ${var#?e} 从最左边删除最短匹配
    stcase
    [root@root shell]# echo ${var#*e}  从最左边删除最短匹配
    stcase
    [root@root shell]# echo ${var#test} 删除test
    case
    [root@root shell]# echo $var
    testcase
    [root@root shell]# echo ${var#tests} 没有匹配
    testcase
    

    第四种模式:
    ${variable##pattern} 这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,
    如果是,就从命令行把variable中的内容去掉右边最长的匹配模式

    [root@root shell]# echo $var
    testcase
    [root@root shell]# echo ${var##*e} 从最左边删除最长匹配,即删除所有
    
    [root@root shell]# echo $var
    testcase
    [root@root shell]# echo ${var##*s} 从最左边删除最长匹配
    e
    
  • $[] $(())

    $[]和$(())是一样的,都是进行数学运算的。支持+ - * / %(“加、减、乘、除、取模”)。但是注意,bash只能作整数运算,对于浮点数是当作字符串处理的。

    $ a=5; b=7; c=2
    $ echo $(( a+b*c ))
    19
    $ echo $(( (a+b)/c ))
    6
    $ echo $(( (a*b)%c))
    1
    
  • [ ]

    为test命令的另一种形式,用在if条件判断中

  • [[]]

    和[]一样都是用来执行条件表达式的判断,[[ ]] 结构比[ ]结构更加通用。在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。
    支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号
    逻辑组合可以不使用test的-a,-o而使用&& ||

你可能感兴趣的:(shell知识点,bash,linux,开发语言)