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 heş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