34.2. Bash 版本3
优质
小牛编辑
128浏览
2023-12-01
在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
=~正则表达式(RegularExpression)匹配操作符在双方括号(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.
升级到Bash版本3使原来在早先版本可以工作的少部分脚本不能工作了. 要重新测试原来的脚本看是否它们仍然可以工作!
确实发生不能工作的情况, 在Advanced Bash Scripting Guide里的部分脚本代码不得不修复 (例如,例子 A-20和 例子 9-4).