Bashを使用してURLからデフォルトのファイル名を抽出する

Bashを使用してURLからデフォルトのファイル名を抽出する
url=http://www.foo.bar/file.ext; echo ${url##/*}

このコードは印刷することを期待していましたが、file.ext完全なURLが印刷されました。なぜ?ファイル名を抽出するには?

答え1

単語が切り捨てられる文字列と一致する必要があるからです。次のようにする必要があります。

$ url="http://www.foo.bar/file.ext"; echo "${url##*/}"
file.ext

ありがとうございます。あなたは私を正しい方向に導きました。また、@frank-zdarskyが述べたように、basenameGNU coreutilsにあり、ほとんどのプラットフォームでも利用できます。

$ basename "http://www.foo.bar/file.ext"
file.ext

答え2

マンページ引用:

${parameter##word}
   Remove matching prefix pattern.  The word is expanded to produce
   a pattern just as in pathname expansion.  If the pattern matches
   the  beginning of the value of parameter, […]

/*URLがhnotで始まるので、は先頭と一致しません/

あなたの意見に基づいてあなたが探していることを行う簡単な方法はですecho "$url" | rev | cut -d / -f 1 | rev。もちろん、スラッシュで終わるURLに関する興味深い結果があります。

必要なものを実行する別の方法はパターンを使用することです*/

答え3

basename(1)はURLにも適用されるため、簡単に次のことができます。

url=http://www.foo.bar/file.ext; basename $url

答え4

また見なさい:Bash拡張ワイルドカード、この場合は拡張globは必要ありません。

 shopt -s extglob; url=http://www.foo.bar/file.ext; echo ${url##+(*/)}

出力:file.ext

関連情報