Advanced Bash-Scripting Guide: An in-depth exploration of the art of shell scripting | ||
---|---|---|
Prev | Chapter 34. Bash, versions 2 and 3 | Next |
在2004年7月27日, Chet Ramey 发布了Bash的第三版本. 它修复了许多bug并加入了一些新的属性.
增加的一些属性有:
新的,更特别的不可移植的 {a..z} 花括号扩展(brace expansion) 操作符.
1 #!/bin/bash 2 3 for i in {1..10} 4 # 比下面的更简单并且更易于理解 5 #+ for i in $(seq 10) 6 do 7 echo -n "$i " 8 done 9 10 echo 11 12 # 1 2 3 4 5 6 7 8 9 10 |
${!array[@]} 操作符, 它扩展给定的数组(array)的所有元素下标.
1 #!/bin/bash 2 3 Array=(element-zero element-one element-two element-three) 4 5 echo ${Array[0]} # 元素0 6 # 数组的第一个元素. 7 8 echo ${!Array[@]} # 0 1 2 3 9 # 数组所有的下标. 10 11 for i in ${!Array[@]} 12 do 13 echo ${Array[i]} # element-zero 14 # element-one 15 # element-two 16 # element-three 17 # 18 # 在数组里的所有元素. 19 done |
=~ 正则表达式(Regular Expression) 匹配操作符在双方括号(double brackets)测试表达式中使用. (Perl也有一个相似的操作符.)
1 #!/bin/bash 2 3 variable="This is a fine mess." 4 5 echo "$variable" 6 7 if [[ "$variable" =~ "T*fin*es*" ]] 8 # 在双方括号([[]])里用=~操作符进行正则匹配. 9 then 10 echo "match found" 11 # match found 12 fi |
或, 更有用的用法:
1 #!/bin/bash 2 3 input=$1 4 5 6 if [[ "$input" =~ "[1-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]" ]] 7 # NNN-NN-NNNN 8 # 每个N是一个数字. 9 # 但, 开头的第一个数字不能是 0. 10 then 11 echo "Social Security number." 12 # 处理 SSN. 13 else 14 echo "Not a Social Security number!" 15 # 或者, 要求正确的输入. 16 fi |
还有一个使用 =~ 操作符的例子, 参考例子 A-28.