Memperbarui
Seseorang di milis bug-bash telah mengkonfirmasi bahwa ini adalah bug.
Jika ada yang tertarik, perbaikan tersedia di komit terbaru untuk mengembangkan cabang .
Sementara
bash -c 'echo "${1##*""}"' _ bar
mencetak garis kosong,
bash -c 'echo "${1##*"${1##*}"}"' _ bar
cetakan bar.
Saya tidak mengerti ini. ${1##*}mengembang ke string kosong, jadi "${1##*}"harus diperlakukan sama seperti sebelumnya "", tetapi sepertinya bash tidak berpikir begitu.
Tampaknya ada konsensus mengenai ini di antara shimplementasi populer lainnya :
$ 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 (dengan atau tanpa --posix) adalah satu-satunya yang tidak sesuai dengan itu:
$ bash -c 'echo "${1##*"${1##*}"}"' _ bar
bar
Dan tanpa mengolah hal-hal pemrosesan perilaku seperti yang diharapkan:
$ bash -c 'echo "${1##*"${1+}"}"' _ bar
$ bash -c 'echo "${1##*"${2}"}"' _ bar
$ bash -c 'echo "${1##*"${2}"}"' _ bar ''
$
Saya benar-benar bertanya-tanya apakah ada penjelasan untuk ini, yang tidak dapat saya temukan di manual. Apakah ini bug, atau kesalahan interpretasi standar? Apakah perilaku ini didokumentasikan di suatu tempat?
PS: Saya tahu solusi cepat adalah dengan menghapus tanda kutip dalam PE, tetapi itu tidak menjawab pertanyaan saya, dan dapat menyebabkan hasil yang tidak diinginkan dengan string yang berisi karakter khusus.
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)cetakan "bar"
4.4.12(3)-release, echo "${BASH##*"${BASH##*}"}"-> /bin/bash. Sementara echo "\${BASH##*"${BASH##*}"}"-> ${BASH##*}dan eval echo "\${BASH##*"${BASH##*}"}"-> kosong.
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)mencetak string kosong