使用双引号的sed不会扩展变量

时间:2014-08-04 13:41:49

标签: variables sed double-quotes

我正在尝试构建一个sh脚本,它会自动用字符串替换.xml文件中的关键字,问题出现在sed表达式中,这是我的代码:

#!/bin/sh
#STRINGS
  string[1]='Johny'
  string[2]='extern'
  string[3]="$(date +%Y_%m_%d-%H:%M:%S)"
  string[4]='0.0.Beta'
  string[5]='Velocity 64km/h'
  string[6]='deionduensis'
  string[7]='iehjnonduneo'
#STRING KEYS
  string_key[1]='Author'
  string_key[2]='Department'
  string_key[3]='Date'
  string_key[4]='Version' 
  string_key[5]='TITLE'
  string_key[6]='Variant1'
  string_key[7]='Variant2'
#  
  files=$(ls ./2VAR/ppt/slides/*xml ./2VAR/ppt/slides/_rels/*xml.rels ./2VAR/ppt/charts/*xml)
#
  for ii in '1' '2' '3' '4' '5' '6' '7'; do
    for file in $files; do
    sed "s|\*$string_key[$ii]\*|$string[$ii]|g" $file > $file.tmp
    mv $file.tmp $file
    done
  done

$ string_key [$ ii]之前和之后的'*'都可以,它们围绕着.xml文件中的关键词。 结果是,没有任何东西被取代。我试图用一个字符串(字符串键)替换sed中的变量,在我看来,问题是,变量$ string_key [$ ii]不会被扩展,但我不知道为什么..有任何想法吗?非常感谢!

1 个答案:

答案 0 :(得分:2)

要引用数组成员,请使用以下语法:

${string_key[$ii]}

${string_key[ii]}

$string_key[$ii]相当于$string_key'['$ii']'