[英]Escaping awk parameters inside a Bash variable
我想将awk命令存储在变量中,以便以后在自动化脚本中使用。
如何将命令存储在变量中?
AUTO_SCRIPT="cp a b"
如何运行存储的命令?
$AUTO_SCRIPT
现在,我想在此脚本中存储一个awk命令:
awk -v par="eth0" '/^iface/ && $2==par {print}' /etc/network/interfaces
(此awk通常会显示类似iface eth0 inet dhcp的内容 。
所以我想将其存储以供以后执行:
AUTO_SCRIPT="awk -v par=\"eth0\" '/^iface/ && $2==par {print}' /etc/network/interfaces"
但是,当尝试执行时:
$AUTO_SCRIPT
awk: cmd. line:1: '/^iface/
awk: cmd. line:1: ^ invalid char ''' in expression
我尝试了什么? 几乎所有的。 使用\\字符转义撇号。 使用qoute字符代替撇号。 尝试使用(和)字符等。 什么都没有。
我这里需要一些好主意。
不要将命令保存在变量中,这没有理由,因为它笨拙且容易出错。 只需创建一个调用awk脚本的shell函数即可。 例如( $
是我的提示):
$ auto_script() { echo 'hello world'; }
$ auto_script
hello world
只需对awk脚本执行相同的操作:
auto_script() { awk -v par='eth0' '/^iface/ && $2==par' /etc/network/interfaces; }
将命令放在函数中是最干净的解决方案。 唯一的其他解决方案是将命令放入数组中 。
auto_script=( awk -v par="eth0" '/^iface/ && $2==par {print}' /etc/network/interfaces )
然后像这样执行它
"${auto_script[@]}"
阅读该BashFAQ#50链接。
除非您使用数组之类的其他机制,否则您似乎无法。
当您调用$AUTO_SCRIPT
,shell会按空格将内容拆分,从而产生以下参数: awk
, -v
, par=\\"eth0\\"
, '/^iface/
, &&
, $2==par
, {print}'
, /etc/network/interfaces
。 结果,awk(1)无法运行适当的程序,并且出现错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.