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