免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2698 | 回复: 8
打印 上一主题 下一主题

bash中的引号,反引号 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-22 11:01 |只看该作者 |倒序浏览
在一个shell脚本中看到这样一句
  1. mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
复制代码
不太明白awk语句中\\$2这里用两个反斜杠,而\"
这里只用一个

论坛徽章:
0
2 [报告]
发表于 2012-02-22 12:18 |只看该作者
一个\逃脱当前shell,一个用来逃脱子shell
不过这句命令写成这样,应该是有改进的余地

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
3 [报告]
发表于 2012-02-22 12:33 |只看该作者

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
4 [报告]
发表于 2012-02-22 17:04 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2012-02-23 16:08 |只看该作者
yangkyo821 发表于 2012-02-22 12:18
一个\逃脱当前shell,一个用来逃脱子shell
不过这句命令写成这样,应该是有改进的余地


那后面的\"不也需要两个\
因为实际的awk命令应该是
  1. awk '$2=="dsplink"{print $1}' /proc/devices
复制代码
才对

论坛徽章:
0
6 [报告]
发表于 2012-02-23 16:18 |只看该作者
在双引号中只有$开头的变量替换会被shell解释,而\"会原封不动的传递给awk命令
就你这个命令来说,子shell中执行的命令应该是:
  1. awk "\$2==\"dsplink\" {print \$1}" /proc/devices
复制代码
我也很少见到这样用法,这说明要用双引号搞awk命令的话,只要里面每个$前都用\来逃脱的话也是可以的,即awk命令中单引号不是必需的,只是为了避免shell解释一个特殊字符才采用的。进一步来说,在一些情况下双引号也可以不要有,那么这句可以写成:
  1. awk \$2=="dsplink" {print \$1} /proc/devices
复制代码

论坛徽章:
0
7 [报告]
发表于 2012-02-23 17:00 |只看该作者
我查了下bash的手册,关于``有这样一句话
backslash retains its literal meaning except when followed by ‘$’, ‘‘’, or ‘\’.
所以是不是可以这样解释:
`awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices`当中,\\$2,\\$1处\后面有\,所以会被转义成一个\字符,但\"处后面是",所以这个\保持其字面意思。所以传给子shell的命令是
awk "\$2==\"dsplink\" {print \$1}" /proc/devices

论坛徽章:
0
8 [报告]
发表于 2012-02-23 20:31 |只看该作者
版主真是活字典。我是看晕啦。就最后一句记住了:各shell版本中内置echo命令的默认选项是不同的

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
9 [报告]
发表于 2012-02-24 11:10 |只看该作者
bash的话,你可以用$()
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP