【发布时间】:2018-04-15 16:54:30
【问题描述】:
我想将 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: I'm trying to put a command in a variable, but the complex cases always fail! 正如它所说,“变量保存数据。函数保存代码。不要将代码放在变量中!”根据您实际尝试完成的任务,FAQ 中列出了许多替代方案。
-
改掉使用 ALL_CAPS_VARNAMES 的习惯。太容易覆盖敏感变量,如 PATH。
-
另见pubs.opengroup.org/onlinepubs/9699919799/basedefs/…,第四段,为对shell或POSIX定义的工具有意义的环境和shell变量建立全大写名称,并为应用程序保留至少一个小写字符的名称使用:为您自己的变量使用小写名称不仅仅是一个好主意,它实际上已被 POSIX 所奉为。