Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash$var_u$1在sed上不起作用_Bash_Function_Variables_Sed - Fatal编程技术网

bash$var_u$1在sed上不起作用

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

我有这样的情况:

下面是一些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\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
作为要展开的变量的名称,则应签出