我想在变量中存储一个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
我尝试了什么? 几乎所有的。使用\ character转义撇号。使用qoute字符而不是撇号。尝试使用(和)字符等。什么都行不通。
我在这里需要一些好主意。
答案 0 :(得分:4)
不要将命令保存在变量中,没有理由,它的笨重和容易出错。只需创建一个调用awk脚本的shell函数。例如($ auto_script() { echo 'hello world'; }
$ auto_script
hello world
是我的提示):
auto_script() { awk -v par='eth0' '/^iface/ && $2==par' /etc/network/interfaces; }
为你的awk脚本做同样的事情:
{{1}}
答案 1 :(得分:2)
将命令放在函数中是最干净的解决方案。唯一的解决方案是将命令放在数组。
中auto_script=( awk -v par="eth0" '/^iface/ && $2==par {print}' /etc/network/interfaces )
然后像这样执行
"${auto_script[@]}"
阅读你给出的BashFAQ#50链接。
答案 2 :(得分:-1)
除非你使用像数组这样的其他机制,否则看起来你不能。
当您致电$AUTO_SCRIPT
时,shell会按空格分割内容,从而产生以下参数:awk
,-v
,par=\"eth0\"
,'/^iface/
,{{ 1}},&&
,$2==par
,{print}'
。结果你awk(1)没有得到一个正确的程序来运行,你得到一个错误。