免费注册 查看新帖 |

Chinaunix

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

[文本处理] shell十三问中关于单引号用法的疑问 [复制链接]

论坛徽章:
2
技术图书徽章
日期:2013-12-20 07:35:03技术图书徽章
日期:2014-12-16 12:59:42
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-03 19:45 |只看该作者 |倒序浏览
不懂关于单引号的用法 想像大家请教一下

$ A=B\ C

$ echo "'$A'"        # 最外面的是雙引號
'B C'

这个例子中,单引号会是$符号失效,那结果为什么不是$A呢

还有,
A=0
awk '{print $'$A'}' 1.txt
这个例子中,也是单引号使$失效,结果为什么不是$$A呢

我执行echo $'$A'  得出的结果是$A 也没弄明白

请教一下各位

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
2 [报告]
发表于 2013-12-03 20:04 |只看该作者
本帖最后由 关阴月飞 于 2013-12-03 20:05 编辑

回复 1# General_715


   
第一个问题:
“ $ A=B\ C
$ echo "'$A'"        # 最外面的是雙引號
'B C'
这个例子中,单引号会是$符号失效,那结果为什么不是$A呢 ”

# 因这里的 单引号 被双引号包围,单引号已经被转义了,成了一个普通字符,失去了单引号原有的mate功能,而$符在双引号中不会被转义,所以输出的是 'B C'
等效于:  echo "  '  "   $a  " '  "


第二个问题:
A=0
awk '{print $'$A'}' 1.txt
这个例子中,也是单引号使$失效,结果为什么不是$$A呢

#这里的单引号是这样配对的:
awk '{print $'$A'}' 1.txt

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
3 [报告]
发表于 2013-12-03 20:11 |只看该作者
第一个问题:
双引号里边儿的大部分元字符的特殊意义被关闭。所以双引号里的单引号只会视为一个普通的字符,但是$符号则会执行变量替换

第二个问题:
引号是就近原则成对出现的成对出现的。所以
awk '{print $'$A'}'  这条命令时,你要分解开来看。分为两部分

'{print $'  //这里因为是单引号,shell不会对它进行解释

$A //这里shell会执行变量替换,即$A为替换成0

'}'  // 这里也因为是单引号,shell也不会对它进行解析

然后shell重组命令行,变成

awk {print $0}

然后 {print $0}  会被awk解析,于是,你懂了

论坛徽章:
2
技术图书徽章
日期:2013-12-20 07:35:03技术图书徽章
日期:2014-12-16 12:59:42
4 [报告]
发表于 2013-12-03 20:21 |只看该作者
多谢楼上两位

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
5 [报告]
发表于 2017-06-10 16:29 |只看该作者
awk '{print $'$A'}' 1.txt
这个很好理解,可是今天我使用了
GNU Awk 3.1.7   的版本

结果执行
awk '{print $$A}' 1.txt
[root@localhost ~]# awk '{print $$A}' 1.txt
sdajflk
sdklfjlk
jkl

是有结果的

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
6 [报告]
发表于 2017-06-10 16:31 |只看该作者
回复 3# reyleon

awk '{print $'$A'}' 1.txt
这个我理解了,可是今天我使用了
GNU Awk 3.1.7   的版本

结果执行
awk '{print $$A}' 1.txt
[root@localhost ~]# awk '{print $$A}' 1.txt
sdajflk
sdklfjlk
jkl

是有结果的,这里该怎么理解?

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
7 [报告]
发表于 2017-06-10 16:32 |只看该作者
回复 3# reyleon

awk '{print $'$A'}' 1.txt
这个我理解了,可是今天我使用了
GNU Awk 3.1.7   的版本

结果执行
awk '{print $$A}' 1.txt
[root@localhost ~]# awk '{print $$A}' 1.txt
sdajflk
sdklfjlk
jkl

是有结果的,这里该怎么理解?

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
8 [报告]
发表于 2017-06-10 16:32 |只看该作者
回复 3# reyleon

awk '{print $'$A'}' 1.txt
这个我理解了,可是今天我使用了
GNU Awk 3.1.7   的版本

结果执行
awk '{print $$A}' 1.txt
[root@localhost ~]# awk '{print $$A}' 1.txt
sdajflk
sdklfjlk
jkl

是有结果的,这里该怎么理解?

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
9 [报告]
发表于 2017-06-10 16:32 |只看该作者
回复 3# reyleon

awk '{print $'$A'}' 1.txt
这个我理解了,可是今天我使用了
GNU Awk 3.1.7   的版本

结果执行
awk '{print $$A}' 1.txt
[root@localhost ~]# awk '{print $$A}' 1.txt
sdajflk
sdklfjlk
jkl

是有结果的,这里该怎么理解?

论坛徽章:
2
15-16赛季CBA联赛之八一
日期:2017-07-06 14:20:4715-16赛季CBA联赛之上海
日期:2017-08-21 22:14:34
10 [报告]
发表于 2017-06-10 16:35 |只看该作者
网络故障。。。我去
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP