【问题标题】:bash $var_$1 does not work on sedbash $var_$1 在 sed 上不起作用
【发布时间】:2017-12-24 16:10:06
【问题描述】:

我有这种情况:

这是一些 file.conf :

1stRecord value
2ndRecord value
3rdRecord value

我需要替换一些记录的值。这是我的脚本:

    correct_1stRecord='new1stValue'
    correct_2ndRecord='new2ndValue'
    correct_3rdRecord='new3rdValue'
    function correct_record() {
     sed -i 's/^$1 $(cat file.conf | grep -e "^$1" | awk '{print $2}')/$1 $correct_$1/" file.conf
    }
correct_record 3rdRecord

当我运行它时,$correct_$1 没有切换到 $correct_3rdRecord,因此我有这个记录:

3rdRecord 3rdRecord 

当我期望它是:

3rdRecord new3rdValue

我试图将 sed 表达式的第二部分修改为 /$1 $(correct_$1) 字节然后它显示命令 correct_3rdRecord 不存在,但是(1)它不是命令而是变量,(2)我确实在上面声明了。

【问题讨论】:

  • 变量不会在单引号内展开,但您真正想要做什么?您几乎没有理由同时使用catsedgrepawk。我认为您在创建问题时引用的内容有些混乱。如果您尝试使用 $correct_$1 作为要扩展的变量的名称,您应该查看 stackoverflow.com/questions/1694196/…

标签: bash function variables sed


【解决方案1】:

非常感谢您的建议。 我是这样做的:

function go() {
  correct_userlogin='niza'
  correct_useraddress='theCenter'
  old_value=$(cat dwa | grep -e "^$1"| awk '{print $2}')
  eval $(echo correct_var='$'"correct_$1")
  echo $correct_var
  sed -i "s/^$1 $old_value/$1 $correct_var/" dwa
}
go userlogin
go useraddress

结果我得到: 之前的记录:

userlogin johny
useraddress out

之后的记录:

userlogin niza
useraddress theCenter

现在工作得很好。 非常感谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-19
    • 2011-03-02
    • 2011-09-04
    • 2020-04-27
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多