[英]Match, substitute and expand shell variable using perl
下一个代码完美地适用于没有花括号{}
变量
export a=1 b=2 c=3
echo '$a$b_${c}_' | perl -pe 's#\$([A-Za-z_]+)#defined $ENV{$1} ? $ENV{$1} : $&#eg'
结果1$b_${c}_
b_
永远不会正确扩展。 没关系。 使用花括号{}
解决了该问题。
下次尝试最有效
echo '${a-$b}_${c}_' |perl -pe 's#\$\{?([A-Za-z_]+)\}?#defined $ENV{$1} ? $ENV{$1} : $&#eg'
结果是1-2_3_
。 但是${a
, $b}
不应该扩展。
我没有找到匹配两个大括号的简单解决方案。
你能帮忙吗? 问题是匹配时不带花括号或两个花括号都在里面,否则不匹配也不替代。
perl -pe's#\$(?:([A-Za-z_]+)|\{([A-Za-z_]+)\})#$ENV{$1//$2}//$&#eg'
测试:
$ export a=1 b=2 c=3
$ echo '$a$b_${c}_' | perl -pe's#\$(?:([A-Za-z_]+)|\{([A-Za-z_]+)\})#$ENV{$1//$2}//$&#eg'
1$b_3_
$ echo '${a-$b}_${c}_' | perl -pe's#\$(?:([A-Za-z_]+)|\{([A-Za-z_]+)\})#$ENV{$1//$2}//$&#eg'
${a-2}_3_
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.