我怎样才能把这个字符串操作放在一个循环中,以便它继续下去,直到没有什么可做的?

我怎样才能把这个字符串操作放在一个循环中,以便它继续下去,直到没有什么可做的?

我正在创建一个脚本来删除除“domain.com”之外的 url 的所有部分。我已经成功完成大部分工作,但我遇到了子文件夹的问题。这是我的代码:

domain=$1

inp="${domain//http:'//'}"
inp="${inp//https:'//'}"
inp="${inp//www.}"
inp="${inp%/*}"

问题是,对于我想要剪掉的每个子文件夹,我需要创建另一个“inp =”${inp%/*}“”规则。目前,上面的代码只能剪掉一层,因此它可以在“www.google.com/hello”上运行,但不能在 www.google.com/hello/there”上运行。我可以将其中两条规则添加到帐户中为此,但我不想重复该规则 20 次才能解释所有的情况。

有什么方法可以将其放入循环中以检测何时完成,或者有更好的方法吗?

答案1

代替

 inp="${inp%/*}"

尝试:

 inp="${inp%%/*}"

这两个外壳替换都是示例后缀去除。表格%删除了最短匹配后缀。相比之下,该%%表格删除了最长匹配后缀。因此,如果您想要第一个/以及删除后的所有内容,请使用%%/*.

文档

man bash

${参数%word}
${参数%%word}
删除匹配的后缀模式。 该单词被扩展以产生一个模式,就像路径名扩展一样。如果模式与参数扩展值的尾部部分匹配,则扩展的结果是删除了最短匹配模式(大小写%)或最长匹配模式(大小写%%)的参数扩展值。如果参数是@或*,则依次对每个位置参数应用模式删除操作,并且扩展是结果列表。如果parameter是下标为@或*的数组变量,则模式删除操作将依次应用于数组的每个成员,并且扩展是结果列表。

相关内容