【Linux 问题记录】(1)变量内容的删除、取代与替换。

在鸟叔的私房菜第四版中的P331讲到了关于变量的内容删除的问题
一开始我就很疑惑,what ???什么意思?

现在我把我的理解写出来。希望可以帮助到跟我有一样疑惑的朋友。

先明确

  • # : 是从左边开始删除 ,跟在这个字符后面的内容理解为:遇到这些内容的时候我就把它和它左边的东西全不要。
  • % :是从右边开始删除,跟在这个字符后面的内容理解为:遇到这些内容的时候我就把它和它右边的东西全不要。
  • *:通配符。

好,接下来

这个path是我的Ubuntu下的,如下图:
path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
在这里插入图片描述

e.g.

先给大家讲一个 # 和两个 # 的代码

再讲一个 % 和两个 % 的代码

一、一个 #

  1. 从左开始删除 #

    echo ${path#*/}     #删除左边第一条 / 和左边的内容
    

    运行结果:
    在这里插入图片描述
    看到最左边的 / 已经没有了。我的代码里 #*/ 的意思就是:从左开始遇到 / 就删除左边的东西,然后显示剩下的内容。

  2. 从左边开始删除我不想要的,比如我想把 第一个 bin 和 它左边的内容删掉。比如下图
    在这里插入图片描述
    怎么做?下面三种代码:

    echo ${path#*bin}	#(1)
    echo ${path#/*bin}	#(2)
    echo ${path#*/bin}	#(3)
    

    哪一种?蒙了吧!
    别慌!按照我说的慢慢来理解
    (1)#*bin :从左边开始查找,遇到含 bin 字样的就停止,删除。

    运行结果(我截图截了两行,方便大家对比查看):
    在这里插入图片描述咦!是不是跟自己想的不一样?竟然在第一个目录(:是作为分隔目录的符号)的 sbin就停下,然后删除了左边的东西。不过,你看,这不和我说的一样吗?遇到含 bin 字样的就停止,删除。

    (2)#/*bin:从左边开始查找遇到 /xxxxbin的就停止,删除。
    运行结果:
    在这里插入图片描述

    这不就和(1)的结果一样嘛。理解也是差不多。(1)是遇到XXXbin就停止,(2)是遇到 /XXXbin 就停止,所以结果是一样的。

    (3)#*/bin:从左边开始查找,遇到XXX/bin就停止。
    运行结果:在这里插入图片描述
    嗯~差不多了,不过为什么前面还有个 : 呢?
    那是因为遇到XXX/bin就停止了嘛,所以更改为

    	echo ${path#*/bin:}	  #bin后加多一个:,这样它就是遇到XXX/bin:停止
    

二、两个 #

我想要输出以下字样呢?怎么解决?

	/snap/bin

可通过以下语句:

echo ${path##*games:}

运行结果:在这里插入图片描述
那么究竟什么意思呢?先贴上鸟哥的一句话

  • #: 符合替换文字的【最短的】那一个
  • ##:符合替换文字的【最长的】那一个

其实两个##和一个#的理解其实是一样的,只不过##是寻找最长的比如:
在这里插入图片描述
标号1的框有games的字眼了,但因为使用的是##所以还会寻找2的games作为最终的结果。

三、一个%

这个就是从右边开始删除的符号

  • 比如:我想删除最后的目录:/snap/bin
    即显示在这里插入图片描述
    可通过以下语句

     echo ${path%:*}
    

    要理解这个也不难,还是按照我的那个思路:从右边开始找到:(冒号)然后删掉它和它右边的东西。

    运行结果:
    在这里插入图片描述

  • 那如果我想显示以下的信息呢?
    在这里插入图片描述
    也很简单,输入以下命令即可:

    echo ${path%:/sbin*}
    

    理解:从右边开始找找到:/sbin字样的就停止,然后删除本身和右边东西。

    运行结果
    在这里插入图片描述

四、两个%%

  • 我想要输出如图结果在这里插入图片描述 输入以下命令:
    echo ${path%%/games*}
    
    理解:从右边开始找寻找/games字样的,第一次找到了/usr/local/games,但因为是%%,所有继续找,直到/usr/games才停下,然后删除
    运行结果
    在这里插入图片描述
    以上就是关于鸟哥书上的以下代码的一些帮助你理解的内容了。
    echo ${path#/*:} 
    echo ${path##/*:} 
    echo ${path%:*bin}
    echo ${path%%:*bin}  
    
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值