Güncelleme
Biri hata bash posta listesinde olan doğruladı bu bir hatadır.
Eğer ilgilenen varsa , son geliştirme devel şubesinde bir düzeltme mevcuttur .
Süre
bash -c 'echo "${1##*""}"' _ bar
boş bir satır yazdırır,
bash -c 'echo "${1##*"${1##*}"}"' _ bar
yazdırır bar.
Bunu anlamıyorum. ${1##*}boş bir dizeye genişler, bu yüzden "${1##*}"olduğu gibi ele alınmalıdır "", ama bash öyle düşünmüyor gibi görünüyor.
Diğer popüler shuygulamalar arasında bu konuda bir fikir birliği var gibi görünüyor :
$ sh -c 'echo "${1##*"${1##*}"}"' _ bar
$ ash -c 'echo "${1##*"${1##*}"}"' _ bar
$ dash -c 'echo "${1##*"${1##*}"}"' _ bar
$ ksh -c 'echo "${1##*"${1##*}"}"' _ bar
$ ksh93 -c 'echo "${1##*"${1##*}"}"' _ bar
$ mksh -c 'echo "${1##*"${1##*}"}"' _ bar
$ posh -c 'echo "${1##*"${1##*}"}"' _ bar
$ yash -c 'echo "${1##*"${1##*}"}"' _ bar
$ zsh -c 'echo "${1##*"${1##*}"}"' _ bar
$
bash (olsun veya olmasın --posix) buna uymayan tek kişi:
$ bash -c 'echo "${1##*"${1##*}"}"' _ bar
bar
Ve alt dize işleme şeyleri olmadan davranış beklendiği gibi olur:
$ bash -c 'echo "${1##*"${1+}"}"' _ bar
$ bash -c 'echo "${1##*"${2}"}"' _ bar
$ bash -c 'echo "${1##*"${2}"}"' _ bar ''
$
Kılavuzda bulamadığım bir açıklama olup olmadığını gerçekten merak ediyorum. Bu bir hata mı yoksa standardın yanlış yorumlanması mı? Bu davranış bir yerde belgelenmiş mi?
Not: Hızlı bir çözümün iç PE'yi ayırmak olduğunu biliyorum, ancak bu sorumu cevaplamıyor ve özel karakterler içeren dizelerle istenmeyen sonuçlara yol açabilir.
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)"bar" yazdırır
4.4.12(3)-release, echo "${BASH##*"${BASH##*}"}"-> /bin/bash. İken echo "\${BASH##*"${BASH##*}"}"-> ${BASH##*}ve eval echo "\${BASH##*"${BASH##*}"}"-> boş.
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)boş bir dize yazdırır