Escaping awk parameters inside a Bash variable
我想将awk命令存储在一个变量中,以便稍后在自动脚本中使用。
如何在变量中存储命令?
1 | AUTO_SCRIPT="cp a b" |
如何运行存储的命令?
1 | $AUTO_SCRIPT |
现在,我要在此脚本中存储awk命令:
1 | awk -v par="eth0" '/^iface/ && $2==par {print}' /etc/network/interfaces |
(此awk通常会打印类似iface eth0 inet dhcp的内容。
所以我想把它存储起来以便以后执行:
1 | AUTO_SCRIPT="awk -v par="eth0" '/^iface/ && $2==par {print}' /etc/network/interfaces" |
但是,在尝试执行时:
1 2 3 | $AUTO_SCRIPT awk: cmd. line:1: '/^iface/ awk: cmd. line:1: ^ invalid char ''' in expression |
我试过什么?几乎所有的事情。用字符转义撇号。使用Qoute字符而不是撇号。尝试使用(和)字符等。没有效果。
我需要一些好主意。
不要将命令保存在变量中,没有理由这样做,因为这样做既笨拙又容易出错。只需创建一个调用awk脚本的shell函数。例如(
1 2 3 4 | $ auto_script() { echo 'hello world'; } $ auto_script hello world |
只需对awk脚本执行相同的操作:
1 | auto_script() { awk -v par='eth0' '/^iface/ && $2==par' /etc/network/interfaces; } |
将命令放入函数中是最干净的解决方案。另一种解决方案是将命令放入数组中。
1 | auto_script=( awk -v par="eth0" '/^iface/ && $2==par {print}' /etc/network/interfaces ) |
然后像这样执行
1 | "${auto_script[@]}" |
请阅读提供给您的bashfaq 50链接。
除非使用其他类似于数组的机制,否则看起来您不能这样做。
当调用