假设我们定义了一个变量为: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}
的区别
更多用法请参考: