我正在创建一个脚本来删除除“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是下标为@或*的数组变量,则模式删除操作将依次应用于数组的每个成员,并且扩展是结果列表。