Shell最全大括号{}、中括号[]、小括号()用法实例

1、大括号{ }用法实例

1)纯{ }用法

拓展功能:例如:ls {name1,name2}.sh touch {1..3}.sh

代码组织功能:例如:多条命令在当前shell中执行 { cmd1;cmd2;cmd3;},注意cmd1{之间有空格,cmd3后边有;

2)$结合{ }用法

取值拓展功能:例如:var=dreamer;echo ${var}way 此条语句输出dreamerway

替换结构:${var:-string},${var:+string},${var:=string},${var:?string}

A,${var:-string}${var:=string}:若变量var为空,则用在命令行中用string来替换${var:-string},否则变量var不为空时,则用变量var的值来替换${var:-string};对于${var:=string}的替换规则和${var:-string}是一样的,所不同之处是${var:=string}var为空时,用string替换${var:=string}的同时,把string赋给变量var: ${var:=string}很常用的一种用法是,判断某个变量是否赋值,没有的话则给它赋上一个默认值。
    B. ${var:+string}的替换规则和上面的相反,即只有当var不是空的时候才替换成string,若var为空时则不替换或者说是替换成变量 var的值,即空值。(因为变量var此时为空,所以这两种说法是等价的
     C,${var:?string}替换规则为:若变量var不为空,则用变量var的值来替换${var:?string};若变量var为空,则把string输出到标准错误中,并从脚本中退出。我们可利用此特性来检查是否设置了变量的值。

模式匹配替换结构:${var%pattern},${var%%pattern},${var#pattern},${var##pattern}

第一种模式:${variable%pattern},这种模式时,shellvariable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最短的匹配模式;
     第二种模式: ${variable%%pattern},这种模式时,shellvariable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式;
     第三种模式:${variable#pattern} 这种模式时,shellvariable中查找,看它是否一给的模式pattern开始,如果是,就从命令行把variable中的内容去掉左边最短的匹配模式;
     第四种模式: ${variable##pattern} 这种模式时,shellvariable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式;
     这四种模式中都不会改变variable的值,其中,只有在pattern中使用了*匹配符号时,%%%###才有区别。结构中的pattern支持通配符,*表示零个或多个任意字符,?表示零个或一个任意字符,[…]表示匹配中括号里面的字符,[!…]表示不匹配中括号里面的字符。

 

2、中括号[ ]用法实例

单中括号用于条件测试:”[“是一个可执行程序,路径是“/usr/bin/[“

if  [ $num1 -eq $num2 ] ; then 等价于 if  /usr/bin/[ $num1 -eq $num2 ] ; then 

还等价于if  test $num1 -eq $num2 ; then

单中括号用于数组:例如:输出数组全部元素echo ${array[@]}

双中括号:单中括号加强版 [[是 bash 程序语言的关键字,并不是一个命令,在单括号中是不可以用 ||  &&等关系运算符号的,只能用-a -o等等,例如[[ $arch_com = i386 || $ARCH = i*86 ]]


3、小括号( )用法实例

单括号代码组织功能:跟上边{}不同的是,此处命令块会在子shell中运行,例如:(cmd1;cmd2;cmd3) 这三条命令的执行不会影响当前的shell环境

单括号数组初始化功能:例如:array=(1 2 3 4 5)

双括号算术运算比较功能:例如:for((i=0;i<9;i++)) 如果不采用双括号可用

for i in `seq 0 9`或者for i in {0..9}代替

 

参考文献:

http://blog.csdn.net/tttyd/article/details/11742241

    原文作者:括号匹配问题
    原文地址: https://blog.csdn.net/dreamerway/article/details/20481569
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞