Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5760992
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类:

2006-07-18 16:31:51

最近,为了给几个大二的同学回答一些shell问题。以前,总是以没有时间,推脱没有看shell十三问。
今天,找出来看了一下,发现里面的内容真是经典。

尤其是对于 ${ } 的一些特异功能:
为了完整起见,我这里再用一些例子加以说明 ${ } 的一些特异功能:   file=/dir1/dir2/dir3/my.file.txt  #我们可以用 ${ } 分别替换获得不同的值:
${file#*/}  #拿掉第一条   / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/} #拿掉最后一条 / 及其左边的字符串:my.file.txt
${file#*.}  #拿掉第一个   . 及其左边的字符串:file.txt
${file##*.} #拿掉最后一个 . 及其左边的字符串:txt
${file%/*}  #拿掉最后条   / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*} #拿掉第一条   / 及其右边的字符串:(空值)
${file%.*}  #拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*} #拿掉第一个   . 及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:     # 是去掉左边(在键盘上 # 在 $ 之左边) , % 是去掉右边(在键盘上 % 在 $ 之右边)
     单一符号是最小匹配(第一个)﹔两个符号是最大匹配(最后一个)。    ${file:0:5}  #提取最左边的 5 个字节:/dir1
   ${file:5:5}  #提取第 5 个字节右边的连续 5 个字节:/dir2      #对变量值里的字符串作替换:
   ${file/dir/path}  #将第一个 dir 提换为 path:/path1/dir2/dir3/my.file.txt
   ${file//dir/path} #将全部 dir 提换为 path:/path1/path2/path3/my.file.txt      #利用 ${ } 还可针对不同的变量状态赋值(没设定、空值、非空值):
${file-my.txt}  #若 $file 没有设定,则使用 my.txt 作传回值。(空值及非空值时不处理) ${file:-my.txt} #若 $file 没有设定或为空值,则使用 my.txt 作传回值。 (非空值时不作处理)
${file+my.txt}  #若 $file 设为空值或非空值,均使用 my.txt 作传回值。(没设定时不作处理)
${file:+my.txt} #若 $file 为非空值,则使用 my.txt 作传回值。 (没设定及空值时不作处理)
${file=my.txt}  #若 $file 没设定,则使用 my.txt 作传回值,同时将 $file 赋值为 my.txt 。                  (空值及非空值时不作处理)
${file:=my.file.txt} #若 $file 没设定或为空值,则使用 my.txt 作传回值,                       同时将 $file 赋值为 my.txt 。 (非空值时不作处理)
${file?my.txt}  #若 $file 没设定,则将 my.txt 输出至 STDERR。 (空值及非空值时不作处理)
${file:?my.txt} #若 $file 没设定或为空值,则将 my.txt 输出至 STDERR。 (非空值时不作处理)   tips:
以上的理解在于, 你一定要分清楚 unset 与 null 及 non-null 这三种赋值状态.
一般而言, : 与 null 有关, 若不带 : 的话, null 不受影响, 若带 : 则连 null 也受影响.
阅读(765) | 评论(0) | 转发(0) |
0

上一篇:文件的权限设置

下一篇:shell中的:

给主人留下些什么吧!~~