当前位置: 首页 > 文档资料 > Shell 中文文档 >

34.2. Bash 版本3

优质
小牛编辑
123浏览
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).