bash$var_u$1在sed上不起作用
我有这样的情况: 下面是一些file.conf文件:bash$var_u$1在sed上不起作用,bash,function,variables,sed,Bash,Function,Variables,Sed,我有这样的情况: 下面是一些file.conf文件: 1stRecord value 2ndRecord value 3rdRecord value 我需要替换一些记录的值。这是我的剧本: correct_1stRecord='new1stValue' correct_2ndRecord='new2ndValue' correct_3rdRecord='new3rdValue' function correct_record() { sed -i 's
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\u1)byt,然后它显示命令correct\u3rdrecord不存在,但是(1)它不是命令而是变量,(2)我在上面声明了它。非常感谢您的建议。 我是这样做的:
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
现在效果很好。
非常感谢变量没有在单引号内展开,但您真正想做的是什么?几乎没有理由同时使用
cat
、sed
、grep
和awk
。我认为你在提出这个问题时引用的话有点混乱。如果试图使用$correct\u$1
作为要展开的变量的名称,则应签出