최신 정보
누군가 버그 배쉬 메일 링리스트가 있습니다 확인 이 버그입니다.
관심이 있으시면 최신 분기 개발을 위해 수정 사항을 사용할 수 있습니다 .
동안
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 ''
$
나는 이것에 대한 설명이 있는지 궁금합니다. 매뉴얼에서 찾을 수 없었습니다. 이것이 버그입니까, 아니면 표준을 잘못 해석합니까? 이 행동은 어딘가에 기록되어 있습니까?
추신 : 빠른 해결 방법은 내부 PE를 인용하지 않는 것이지만 내 질문에 대답하지 않으며 특수 문자가 포함 된 문자열로 원하지 않는 결과를 초래할 수 있습니다.
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)"bar"인쇄
4.4.12(3)-release에서 echo "${BASH##*"${BASH##*}"}"-> /bin/bash. 동안 echo "\${BASH##*"${BASH##*}"}"-> ${BASH##*}와 eval echo "\${BASH##*"${BASH##*}"}"-> 빈.
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)빈 문자열을 인쇄