何もしなくなるまで続くように、この文字列操作をループに入れるにはどうすればよいですか?

何もしなくなるまで続くように、この文字列操作をループに入れるにはどうすればよいですか?

「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}
一致するサフィックスパターンを削除します。 パス名拡張と同様に、単語を拡張してパターンを生成します。パターンがパラメータ拡張値の末尾の部分と一致する場合、拡張結果は、最短一致パターン(大文字と小文字%)または最長一致パターン(大文字と小文字)が削除された%%パラメータ拡張値です。引数が@または*の場合、パターン除去操作は各位置引数に順番に適用され、拡張は結果リストになります。パラメーターが@または*付き添え字付きの配列変数の場合、パターン除去操作は配列の各メンバーに順番に適用され、拡張は結果のリストです。

関連情報