我想将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链接。

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

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

  1. win10复制粘贴linux,如何在Windows 10的Bash Shell中启用复制和粘贴键盘快捷键 | MOS86...

    Windows 10s Bash shell终于有了方便的复制和粘贴键盘快捷键,但是出于兼容性原因,默认情况下将它们禁用. 这些快捷方式在2018年10月更新中可用,该更新最初代号为Redstone ...

  2. Linux学习总结(70)——Bash 脚本中常用的内置变量汇总

    一.$FUNCNAME.$LINENO.$PWD FUNCNAME 表示当前函数的名字,作用范围仅限函数中使用,在函数外无值 LINENO 表示当前所在脚本中变量出现在的行号 PWD 表示当前目录, ...

  3. linux shell eval,【shell】bash shell 中 set 和 eval 命令的使用

    set命令 https://man.linuxde.net/set Bash 脚本 set 命令教程 http://www.ruanyifeng.com/blog/2017/11/bash-set.h ...

  4. Linux Bash Shell中的特殊参数含义

    2019独角兽企业重金招聘Python工程师标准>>> $n      脚本的第n个参数值,n=0,1, 2, ... 9 $*     这个程式的所有参数,作为一个字符串返回 $@ ...

  5. java中string中转义_如何在String.Format中转义%?

    我将SQL查询存储在我的strings.xml文件中,并且我想使用String.Format在代码中构建最终的字符串. SELECT语句使用like,如下所示: SELECT Field1, Fiel ...

  6. C#格式化字符串中转义大括号“{}”

    C#格式化字符串中转义大括号"{}" 原文:C#格式化字符串中转义大括号"{}" 今天,用C#写程序操作Excel,读取单元格内容根据所需格式生成字符串,使用S ...

  7. 在 Java 中转义 HTML

    本文介绍如何在 Java 中转义 HTML 字符和符号.我们可以使用 Apachecommons-text和StringEscapeUtils.escapeHtml4(str)方法来转义 Java 中 ...

  8. linux shell 获取环境变量,bash shell中的环境变量

    环境变量--bash shell使用环境变量来存储系统相关数据,并允许将数据存储在内存中. 环境变量分为:全局环境变量 本地环境变量 目录全局环境变量 本地环境变量 设置全局环境变量 删除环境变量 P ...

  9. 沈超+shell课件_[Linux教程 李明 沈超 兄弟连]10.4.4 Shell基础-Bash变量-预定义变量.ppt...

    [Linux教程 李明 沈超 兄弟连]10.4.4 Shell基础-Bash变量-预定义变量 第十讲 Shell基础 主讲人:沈超(/lampsc) 交流论坛: 课程大纲 10.1 Shell概述 1 ...

最新文章

  1. Kettle连接HiveServer2配置和常见问题解决
  2. Java开发者跳槽必备:2021阿里Java面试题目大汇总
  3. 技术分享连载(六十)
  4. 干货丨深度迁移学习方法的基本思路(文末送书)
  5. 明日之后抄袭rust_古人怎么抄袭?何法盛偷窃原著,宋之问压杀外甥,班固参考史记...
  6. android listview 异步加载图片并防止错位
  7. leetCode-995:K 连续位的最小翻转次数
  8. 计算机工程师专用小工具,204个联想工程师专用小工具合集
  9. hg8245设置无线打印服务器,小编教您设置华为HG8245光纤猫路由器
  10. 使用TestNG-abbot测试GUI
  11. 基于单片机的电子万年历的设计
  12. PLC基础——1.自保持回路
  13. 微信小程序Unhandled promise rejection TypeError
  14. Win系统 - 如何查看电脑开机了多长时间?
  15. 7、任务分配-任务分派其他人
  16. 数千亿“颜值经济”蓝海里,买单的究竟是哪些人?
  17. 【嵌入式】STM32实现SPI双机通信的一些细节(2)片选总结
  18. 为网站添加视频、音乐
  19. blt功能_C++中BitBlt的使用方法详解
  20. 【大学物理·静止电荷的电场】电容器的电容

热门文章

  1. vr降噪器英文是什么_什么是VR体验馆设备?
  2. 基于stm32简易计算机电路图,基于STM32的简易电子计算器设计与实现(DOC).doc
  3. android 前台服务自定义布局不显示_Android自定义LinearLayout布局显示不完整的解决方法...
  4. Android开发之打开QQ聊天页面的方法
  5. java给qq发消息_QQ发送消息
  6. java实现c#的datetime.ticks_java的Date.getTime()转换成C#的Datetime.ticks | 学步园
  7. vc连接mysql 查询_vc连接数据库中查询代码如何写呀 急急急!!!!!!
  8. linux中su命令源码,Linux-命令-su
  9. 用计算机怎么录资料,如何在短时间内快速录入大量数据 -电脑资料
  10. mysql group_concat