Aggiornare
Qualcuno nella mailing list bug-bash ha confermato si tratta di un bug.
Se qualcuno è interessato, è disponibile una correzione nell'ultimo commit per sviluppare il ramo .
Mentre
bash -c 'echo "${1##*""}"' _ bar
stampa una riga vuota,
bash -c 'echo "${1##*"${1##*}"}"' _ bar
stampe bar .
Non lo capisco ${1##*}si espande in una stringa vuota, quindi "${1##*}"dovrebbe essere trattato così com'è "", ma sembra che bash non la pensi così.
Sembra esserci un consenso su questo tra le altre shimplementazioni popolari :
$ 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 (con o senza --posix) è l'unico non conforme a quello:
$ bash -c 'echo "${1##*"${1##*}"}"' _ bar
bar
E senza elementi di elaborazione della sottostringa il comportamento è come previsto:
$ bash -c 'echo "${1##*"${1+}"}"' _ bar
$ bash -c 'echo "${1##*"${2}"}"' _ bar
$ bash -c 'echo "${1##*"${2}"}"' _ bar ''
$
Mi chiedo davvero se c'è una spiegazione per questo, che non ho trovato nel manuale. È un bug o un'errata interpretazione dello standard? Questo comportamento è documentato da qualche parte?
PS: So che una soluzione alternativa è annullare la quotazione del PE interno, ma ciò non risponde alla mia domanda e può portare a risultati indesiderati con stringhe contenenti caratteri speciali.
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)stampa "bar"
4.4.12(3)-release, echo "${BASH##*"${BASH##*}"}"-> /bin/bash. Mentre echo "\${BASH##*"${BASH##*}"}"-> ${BASH##*}e eval echo "\${BASH##*"${BASH##*}"}"-> vuoto.
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)stampa una stringa vuota