您的位置:首页 > 运维架构 > Shell

bash大括号参数扩展(Parameter Expansion)

2014-03-06 14:17 232 查看
假设我们定义了一个变量为:
file=/dir1/dir2/dir3/my.file.txt

字符串截取

按分隔符截取

${file#*/}
截取第一个
/
右边的字符串
dir1/dir2/dir3/my.file.txt


${file##*/}
截取最后一个
/
右边的字符串
my.file.txt


${file%/*}
截取最后一个
/
左边的字符串
/dir1/dir2/dir3


${file%%/*}
截取第一个
/
左边的字符串 (空值)

总结
#
语法为
# * separator
截取
separator
右边的字符串

%
语法为
% separator *
截取
separator
左边的字符串

一个
#
%
表示贪婪截取

两个
#
%
标示非贪婪截取

substring

${file:0:5}
0
开始,截取
5
个字符
/dir1


${file:5:5}
5
开始,截取
5
个字符
/dir2


${file::5}
0
开始,截取
5
个字符
/dir1


总结
substring
表达式语法为
${var:pos:length}
, 标示对变量
var
pos
开始截取
length
个字符,
pos
为空标示
0

字符串替换

${file/dir/path}
把第一个
dir
替换成
path
/path1/dir2/dir3/my.file.txt


${file//dir/path}
把所有
dir
替换成
path
/path1/path2/path3/my.file.txt


总结字符串替换表达式语法为
${var/src/dst}
${var//src/dst}
。一个
/
标示替换第一个
src
两个
//
标示替换所有
src

默认值

${file-my.file.txt}
$file
没有设定,则使用
my.file.txt
返回,
$file
空值不做处理

${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


总结
-
变量不存在返回默认值

+
变量存在返回默认值

=
变量不存在赋值并返回默认值

?
变量不存在默认值输出到
STDERR


没有
:
未设定为不存在,空值有意义

:
未设定和空值均标示不存在

其他

${#file}
返回字符串长度

${file: -4}
返回字符串最后四个字节,注意和
${file:-4}
的区别

更多用法请参考:Parameter Expansion
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: