将$ {}变量传递给awk而不会丢失它

时间:2014-02-21 12:31:13

标签: bash variables sed awk echo

我有以下字符串This is ${name} ${surname}。 这个字符串是不可替代的

现在我需要用自己的数据替换${name}${surname}。我想使用sed / awk,但是当我输入

string="This is ${name} ${surname}"
echo $string | awk '{... gsub() ...}'

然后问题是awk我只传递了This is,因为echo解析了${}这是空的。

我不知道我是否可以使用

之类的东西
awk <<EOF
This is ${name} ${surname}
EOF

因为我需要将它包装到变量中,因为bash是oneliner我不能像那样输入

VAR=$(awk <<
This is ${name} ${surname}
EOF)

感谢您的时间

2 个答案:

答案 0 :(得分:5)

使用单引号定义字符串(以避免shell扩展):

string='This is ${name} ${surname}'

然后在awk中使用:

echo "$string" | awk '{print $0}'
This is ${name} ${surname}

您可以看到awk如何获得未展开的字符串。

答案 1 :(得分:2)

简单的shell怎么样:

template='This is ${name} ${surname}'
name=Peter
surname=Falk
eval "echo $template"

将打印

This is Peter Falk

您是否有任何特殊原因要使用awk来执行此简单任务?