Обновление
Кто-то в список рассылки bug-bash имеет подтверждено это ошибка.
Если кому-то интересно,исправление доступно в последнем коммите для ветки devel .
Пока
bash -c 'echo "${1##*""}"' _ bar
печатает пустую строку,
bash -c 'echo "${1##*"${1##*}"}"' _ bar
печатает bar
.
Я не понимаю этого. ${1##*}
расширяется до пустой строки, поэтому "${1##*}"
следует рассматривать так же, как ""
, но кажется, что bash так не считает.
Похоже, что среди других популярных мнений существует консенсусsh
реализации:
$ 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 (с --posix
или без него) - единственный, не соответствующий этому:
$ bash -c 'echo "${1##*"${1##*}"}"' _ bar
bar
И без обработки подстрок, поведение выглядит какОжидается:
$ bash -c 'echo "${1##*"${1+}"}"' _ bar
$ bash -c 'echo "${1##*"${2}"}"' _ bar
$ bash -c 'echo "${1##*"${2}"}"' _ bar ''
$
Мне действительно интересно, есть ли объяснение этому, которое я не смог найти в руководстве. Это ошибка или неправильная интерпретация стандарта? Задокументировано ли это поведение где-нибудь?
PS: Я знаю, что быстрый обходной путь - это расстаться с внутренним PE, но это не отвечает на мой вопрос и может привести к нежелательным результатам со строками, содержащими специальные символы.