bashvariables:扩展名称与模式匹配的variables的值

比方说,在bash中我有几个variables:POD3_1,POD3_A,POD3_2,POD3_B等。每个variables名称都以“POD3”开头。 假设我想扩展命令行中所有variables的值,以便可以在脚本中使用这些值:

for H in $POD3_1 $POD3_A ... do ... done 

而不是像上面那样用手写出每个variables名称(因为有这么多),有没有办法做到这一点,以便任何variables名称匹配“POD3”扩展? 换句话说,variables名称的“通配符”?

你可以使用bash的大括号扩展。 {..}例如,如果你的variables是POD3_1,POD3_2到9,POD3_A,POD3_B,直到M,你可以这样做 –

   H $ POD3_ {1..9} $ POD3_ {A..M} 
  做
      ...
   DONE

如果variables名称不是序列,则可以使用逗号分隔符 – $POD3_{1,A,F}

你可以简单地遍历env的输出。

 env | awk -F = '$1 ~ /^POD3_/ { print $1 }' | while read var; do : : done 

Awk脚本检查每个variables名称,只有在与模式匹配时才打印。

你在循环内部是variables的名字,而不是它的值。 在Bash中,可以使用${!var}来插入它; 在POSIX sh ,我想你将不得不求助于evak ,或者修改循环来直接遍历值而不是variables名。

如果您有多线variables,这仍然会有些糟糕,但是误报的可能性相当低。 (如果您切换到循环的值,则更less。)

如果您使用的是bash版本4,请使用关联数组,而不必pipe理数十个variables:

 declare -A POD3=( [1]=value_1 [2]=value_2 [A]="value a" [B]="value b" [C]="value c" ) echo "${POD3[A]}" for key in "${!POD3[@]}"; do echo "$key => ${POD3[$key]}" done