免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: shaoping0330
打印 上一主题 下一主题

网中人“shell十三问之变量替换” 外传(初学shell必看)  关闭 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-09-07 11:53 |只看该作者

网中人“shell十三问之变量替换” 外传(初学shell必看)

原帖由 "zhysimon" 发表:
这是13问例子我怎么调不通
$ file=/dir1/dir2/dir3/my.file.txt
$ echo ${file:0:5}
替代错误???????

这个应该和你是什么shell有关。
echo $shell
或echo $SHELL
查看。

原帖由 "zhysimon" 发表:
我的本意是找出来年(eg:2004)给变量year
date '%y'
D=`date`
year=`${$D:0:4}`
echo $year
我的不对……

date命令后的格式要用"+"开始,不是用引号:
date +%y
D已经是变量了,在变量替换时就不需再在前面加"$"符号了,也不需要加 `` :
year=${D:0:4}
echo $year

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-08 06:20:00
12 [报告]
发表于 2004-09-08 09:33 |只看该作者

网中人“shell十三问之变量替换” 外传(初学shell必看)

up

论坛徽章:
0
13 [报告]
发表于 2004-09-08 15:37 |只看该作者

网中人“shell十三问之变量替换” 外传(初学shell必看)

非常好!

论坛徽章:
0
14 [报告]
发表于 2004-09-19 14:05 |只看该作者

网中人“shell十三问之变量替换” 外传(初学shell必看)

ding

论坛徽章:
0
15 [报告]
发表于 2004-09-19 18:30 |只看该作者

网中人“shell十三问之变量替换” 外传(初学shell必看)

学习中~~~谢谢

论坛徽章:
0
16 [报告]
发表于 2004-09-19 18:40 |只看该作者

网中人“shell十三问之变量替换” 外传(初学shell必看)

[quote]原帖由 "纳兰婷"]学习中~~~谢谢[/quote 发表:

婷JJ难得来本版呀@_@

论坛徽章:
0
17 [报告]
发表于 2004-09-19 21:24 |只看该作者

网中人“shell十三问之变量替换” 外传(初学shell必看)

学习中

论坛徽章:
0
18 [报告]
发表于 2005-06-08 21:20 |只看该作者

网中人“shell十三问之变量替换” 外传(初学shell必看)

ok

论坛徽章:
0
19 [报告]
发表于 2005-06-11 17:43 |只看该作者

网中人“shell十三问之变量替换” 外传(初学shell必看)

好好,可有的看不太明白啊

论坛徽章:
0
20 [报告]
发表于 2005-06-12 00:32 |只看该作者

网中人“shell十三问之变量替换” 外传(初学shell必看)

shaoping0330 写到:
dir3/my.file.txt

“#”:相当于最小匹配,遇到一个最小的满足其内表达式的即中止删除动作。
“##”:相当于最大匹配
例:
$ file2=abcd.efgh.ijkl.oopp
$ echo ${file2#*.*.*.*}
$ echo ${file2##*.*.*.*}
..........


有几个现象很奇怪,请大侠解释一下

引用:
[root@lfs tmp]# echo ${file3#*}
*ab*de*cd
[root@lfs tmp]# echo ${file3#**}
*ab*de*cd
[root@lfs tmp]# echo ${file3#***}
*ab*de*cd

上面的3个例子,第一个容易理解,“*”匹配空了
但是为什么第二、第三个会输出同样的结果?难道所有的“*”都匹配空了?
[root@lfs tmp]# echo ${file3#**}
*ab*de*cd
[root@lfs tmp]# echo ${file3#***}
*ab*de*cd
我认为这里有点象0*0=0的意思,因为是一个#号的最小匹配,而且*默认为空,两个*或者多个*都应该是空

引用:
[root@lfs tmp]# echo ${file3##*}


为什么上面的“*”没有匹配空?
是否可以这样理解,比如变量值为“*ab*de*cd”,表达式处理的时候认为值是“空*ab*de*cd空”上面的例子“*”匹配最后面的空,所以输出空。

我认为##这里是最大匹配,而*代表file3 ,把file3都删除了,就剩下空了,这样理解比较简单
引用:
[root@lfs tmp]# echo ${file3##\*}
ab*de*cd
[root@lfs tmp]# echo ${file3#\*}
ab*de*cd

我的理解,第一条应该输出“cd”而不是“ab*de*cd”,因为匹配最后一个“*”,可是上面的结果怎么理解?为什么第一条和第二条的结果一样?

这个问题我也没有想明白!!!,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP