我试图用shell中匹配的bash变量的值替换字符串中由字符分隔的子字符串。
到目前为止,我已经试过了,但没有成功:
varone="noob"
vartwo="trivial"
echo "my {varone} and {vartwo} question" | perl -pe 's|(.*){(\w+)}(.*)|${1}'$(echo "${'${2}'}")'${3}|g'
但我得到:
bash: ${'${2}'}: bad substitution
你知道怎么做吗?提前谢谢!
最佳答案
不要从shell生成Perl代码!It isn't easy。
不是生成代码,而是将值传递给脚本。This answer显示了向Perl一行程序传递值的几种方法。导出要插值的变量在这里是最简单的。
export varone="noob"
export vartwo="trivial"
echo "my {varone} and {vartwo} question" |
perl -pe's/\{(\w+)\}/$ENV{$1}/g'
这也意味着您可以插入其他变量,如
PATH
。如果这不好,你就得检查变量名是否合法。export varone="noob"
export vartwo="trivial"
echo "my {varone} and {vartwo} question" |
perl -pe's/\{(varone|vartwo)\}/$ENV{$1}/g'