shell——变量之字符串的截取

上篇文章讲到字符串的截取可以用字符位置索引的方式,即

从字符串第二个位置开始截取5个(索引值从0开始)

echo "${string:1:5}"

我们还可以使用#+*+字符%+字符+*的方式进行从左或从右的截取。

废话不多说,直接上例子。

#!/bin/bash
str="https://mp.csdn.net/mp_blog/creationhttps://mp.csdn.net/mp_blog/creation"
echo "str       : ${str}"
echo "str#*/    : ${str#*/}"
echo "str##*/   : ${str##*/}"
echo "str%/*    : ${str%/*}"
echo "str%%/*   : ${str%%/*}"

输出

str     : https://mp.csdn.net/mp_blog/creationhttps://mp.csdn.net/mp_blog/creation
str#*/  : /mp.csdn.net/mp_blog/creationhttps://mp.csdn.net/mp_blog/creation
str##*/ : creation
str%/*  : https://mp.csdn.net/mp_blog/creationhttps://mp.csdn.net/mp_blog
str%%/* : https:

#*/ 就是从字符串左边开始删除到第一个/号结束,输出结果就是保留未删除右边字符。

##*/ 就是从字符串左边开始删除到最后一个/号结束,输出结果就是保留未删除右边字符。

%/* 就是从字符串右边开始删除到右起第一个/号结束,输出结果就是保留未删除左边字符。

%%/* 就是从字符串右边开始删除到右起最后一个/号结束,输出结果就是保留未删除左边字符。

#代表从左删除,%代表从右删除,这很好理解,最易混淆在其中作怪的就是*的位置

下面是*位置错误的例子,结果是无变化

#!/bin/bash
str="https://mp.csdn.net/mp_blog/creationhttps://mp.csdn.net/mp_blog/creation"
#*位置用法错误,输出不生效
echo "str#/*    : ${str#/*}"
echo "str##/*   : ${str##/*}"
echo "str%*/    : ${str%*/}"
echo "str%%*/   : ${str%%*/}"

输出结果

str#/*  : https://mp.csdn.net/mp_blog/creationhttps://mp.csdn.net/mp_blog/creation
str##/* : https://mp.csdn.net/mp_blog/creationhttps://mp.csdn.net/mp_blog/creation
str%*/  : https://mp.csdn.net/mp_blog/creationhttps://mp.csdn.net/mp_blog/creation
str%%*/ : https://mp.csdn.net/mp_blog/creationhttps://mp.csdn.net/mp_blog/creation

我们可以看到#号出现时,*在截取位置字符的右边,不生效;%号出现时,*在截取位置字符的左边,不生效。

我们可以这样理解:*是截取时删除的内容,从左删除时,删除内容是符号的左边,所以*在字符左边,不可能说从左边第一个字符开始删除,删除的是右边的内容;

同理,从右删除时,删除的内容是从右第一个字符开始,不可能删除的是左边的内容。

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值