【问题标题】:sed using double quotes doesn't expand the variablessed 使用双引号不会扩展变量
【发布时间】:2014-08-04 13:41:49
【问题描述】:

我正在尝试构建一个 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] 不会被扩展,但我不知道为什么..有任何想法吗?非常感谢!

【问题讨论】:

    标签: variables sed double-quotes


    【解决方案1】:

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

    ${string_key[$ii]}
    

    ${string_key[ii]}
    

    $string_key[$ii] 等价于$string_key'['$ii']'

    【讨论】:

    • @user3906722:很奇怪。为我工作。你修复了两个数组吗?
    • 好的,现在可以了 :),我的错误,非常感谢 choroba!
    • 我确实评论了 'mv $file.tmp $file' 行,最后检查了 .tmp 文件。我没有意识到的是,每次 for $file 循环运行时 tmp 文件都会更改:)。现在可以正常使用了,再次感谢
    猜你喜欢
    • 2012-01-25
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2014-12-31
    相关资源
    最近更新 更多