我怎麼能把這個字串操作放在一個循環中,以便它繼續下去,直到沒有什麼可做的?

我怎麼能把這個字串操作放在一個循環中,以便它繼續下去,直到沒有什麼可做的?

我正在創建一個腳本來刪除除“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是下標為@或*的數組變量,則模式刪除操作將依次應用於數組的每個成員,並且擴展是結果列表。

相關內容