「domain.com」以外のURLのすべての部分を削除するスクリプトを作成しています。ほとんどの作業を行いましたが、サブフォルダに問題が発生しました。これは私のコードです。
domain=$1
inp="${domain//http:'//'}"
inp="${inp//https:'//'}"
inp="${inp//www.}"
inp="${inp%/*}"
問題は、切り取りたいサブフォルダごとに別の "inp="${inp%/*}"" ルールを作成する必要があることです。現在、上記のコードはレイヤーを1つだけ切り取っているため、「www.google.com/hello」では機能しますが、www.google.com/hello/there」では機能しません。2つを組み合わせることができますが、説明するためにルールを20回繰り返したくありません。
完了時点を検出するためにこれをループに入れる方法はありますか、それとも良い方法がありますか?
答え1
変える
inp="${inp%/*}"
努力する:
inp="${inp%%/*}"
両方のシェル交換は例です。サフィックスの削除。テーブルが%
削除されました。最短サフィックスを一致させます。これと比較して、この%%
表では最長サフィックスを一致させます。したがって、/
削除後に最初の項目とすべての項目が必要な場合%%/*
。
文書
からman bash
:
${ パラメータ %word}
${ パラメータ %%word}
一致するサフィックスパターンを削除します。 パス名拡張と同様に、単語を拡張してパターンを生成します。パターンがパラメータ拡張値の末尾の部分と一致する場合、拡張結果は、最短一致パターン(大文字と小文字%
)または最長一致パターン(大文字と小文字)が削除された%%
パラメータ拡張値です。引数が@または*の場合、パターン除去操作は各位置引数に順番に適用され、拡張は結果リストになります。パラメーターが@または*付き添え字付きの配列変数の場合、パターン除去操作は配列の各メンバーに順番に適用され、拡張は結果のリストです。