linux变量转义,关于linux:在Bash变量中转义awk参数

我想将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字符而不是撇号。尝试使用(和)字符等。没有效果。

我需要一些好主意。

参见bashfaq 50:我试图在变量中放置一个命令,但是复杂的情况总是失败的!正如它所说,"变量保存数据。函数保持代码。不要把代码放在变量中!"根据您实际尝试完成的工作,常见问题解答中列出了许多备选方案。

摆脱使用所有大写字母的习惯。太容易覆盖敏感变量,如path。

另请参见pubs.opengroup.org/onlinepubs/9699919799/basedefs/…,第四段,建立环境和shell变量所用的所有caps名称,这些变量对shell或posix定义的工具有意义,并为应用程序保留至少一个小写字符的名称:为自己的变量使用小写名称不仅仅是一个好方法。想法,它实际上被供奉在POSIX中。

不要将命令保存在变量中,没有理由这样做,因为这样做既笨拙又容易出错。只需创建一个调用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)无法运行正确的程序,因此会出现错误。

阅读问题注释中的bash faq链接。

@格伦纳扎克曼谢谢。我没有考虑过阵列;)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值