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.file.txt} :假如$file没有设定,则使用my.file.txt作传回值。(空值及非空值时不作处理) 
${file:-my.file.txt} :假如$file没有设定或为空值,则使用my.file.txt作传回值。(非空值时不作处理)
${file+my.file.txt} :假如$fil设为空值或非空值,均使用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输出出至STDERR。(空值及非空值时不作处理)
${file:?my.file.txt} :若$file没设定或为空值,则将my.file.txt输出至STDERR。(非空值时不作处理)

${#var} 可计算出变量值的长度:

${#file} 可得到27 ,因为/dir1/dir2/dir3/my.file.txt 是27个字节
  • 10
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值