假设咱们定义了一个变量为:file=/dir1/dir2/dir3/my.file.txt
ide
${file#*/}
截取第一个/
右边的字符串 dir1/dir2/dir3/my.file.txt
spa
${file##*/}
截取最后一个/
右边的字符串 my.file.txt
code
${file%/*}
截取最后一个/
左边的字符串 /dir1/dir2/dir3
orm
${file%%/*}
截取第一个/
左边的字符串 (空值)字符串
总结string
#
语法为 # * separator
截取separator
右边的字符串it
%
语法为 % separator *
截取separator
左边的字符串class
一个#
或%
表示贪婪截取变量
两个#
或%
标示非贪婪截取file
${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}
的区别