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

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

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

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

你可能感兴趣的:(服务器,bash,linux)