【发布时间】: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)我确实在上面声明了。
【问题讨论】:
-
变量不会在单引号内展开,但您真正想要做什么?您几乎没有理由同时使用
cat、sed、grep和awk。我认为您在创建问题时引用的内容有些混乱。如果您尝试使用$correct_$1作为要扩展的变量的名称,您应该查看 stackoverflow.com/questions/1694196/…
标签: bash function variables sed