url=http://www.foo.bar/file.ext; echo ${url##/*}
Bu kodun yazdırılmasını bekledim file.ext
, ancak tüm URL'yi yazdırıyor. Neden? Dosya adını nasıl ayıklayabilirim?
dirname $url
. Veya grep -o 'http://[^/]*' <<<$url
.
url=http://www.foo.bar/file.ext; echo ${url##/*}
Bu kodun yazdırılmasını bekledim file.ext
, ancak tüm URL'yi yazdırıyor. Neden? Dosya adını nasıl ayıklayabilirim?
dirname $url
. Veya grep -o 'http://[^/]*' <<<$url
.
Yanıtlar:
Çünkü sözcük kırpılacak dizeyle eşleşmelidir. Şöyle görünmelidir:
url="http://www.foo.bar/file.ext"; echo "${url##*/}"
Teşekkürler derobert, beni doğru yöne yönlendirdin.
Sayfayı alıntılamak için:
${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'niz ile başlamadığı için başlangıç ile h
eşleşmiyor /
.
Aradığınızı yapmanın önemsiz bir yolu (yorumunuza göre) echo "$url" | rev | cut -d / -f 1 | rev
. Ancak elbette bu, eğik çizgi ile biten URL'ler için ilginç sonuçlar verecektir.
İstediğinizi yapmanın başka bir yolu, */
bunun yerine deseni kullanmak olabilir .
basename
(1) URL'lerle de çalışır, böylece şunları yapabilirsiniz:
url=http://www.foo.bar/file.ext; basename $url
Ayrıca bakınız: Bash Genişletilmiş Globbing , bu durumda uzatılmış glob gerekli değildir.
shopt -s extglob; url=http://www.foo.bar/file.ext; echo ${url##+(*/)}
Çıktı: file.ext