Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3024175
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2011-05-14 14:14:41

假设我们定义一个变量为: 
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}:从左边开始提取从第0位开始的长度为5个字符长度的内容:/dir1 
${file:5:5}:从左边开始提取从第5位开始的长度为5个字符长度的内容:/dir2
${file: -4}: 只提取最后4位:.txt
${file::-4}:删除最4位字符:/dir1/dir2/dir3/my.file (GNU bash, version 4.2.8上测试通过)



${file/dir/path}:将第一个dir替换成path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:将全部dir替换成path:/path1/path2/path3/my.file.txt

 

利用  ${ }  還可針對不同的變數狀態賦值(沒設定、空值、非空值): 
${file-my.file.txt} :  假如 $file 為空值,則使用  my.file.txt  作默認值。(保留沒設定及非空值) 
${file:-my.file.txt} : 假如 $file 沒有設定或為空值,則使用  my.file.txt  作默認值。(保留非空值) 
${file+my.file.txt} :  不管 $file 為何值,均使用  my.file.txt  作默認值。 (不保留任何值) 
${file:+my.file.txt}  :除非 $file 為空值,否則使用  my.file.txt  作默認值。 (保留空值) 
${file=my.file.txt} :  假如 $file 沒設定,則使用  my.file.txt  作默認值,同時將 $file 定義為非空值。(保留空值及非空值) 
${file:=my.file.txt}  :假如 $file 沒設定或為空值,則使用  my.file.txt  作默認值,同時將  $file 定義為非空值。 (保留非空值) 
${file?my.file.txt}  : 假如 $file 沒設定,則將  my.file.txt  輸出至  STDERR。 (保留空值及非空值)) 
${file:?my.file.txt}  :假如 $file 沒設定或為空值,則將  my.file.txt  輸出至STDERR。 (保留非空值) 

 

還有哦,${#var} 可計算出變量值的長度: 
${#file}  可得到  27 ,因為  /dir1/dir2/dir3/my.file.txt  剛好是  27 個字節...

echo "a b "{1..3}"|"
a b 1| a b 2| a b 3|
阅读(2073) | 评论(1) | 转发(6) |
给主人留下些什么吧!~~

linux_kaige2011-11-13 11:26:31

${} 变量替换,$()、`` 命令替换,不过我觉得也可以把命令执行的结果当做变量