아래 스크립트는 매우 간단합니다 . &
다음으로 바꾸세요 &
.
string="Foo & Bar"
echo "${string//&/&}";
그러나 스크립트는 아무것도 하지 않습니다. 오류 메시지가 없으며 아무것도 대체되지 않습니다.
Foo & Bar
마침내 해결책을 찾았습니다. 교체 부품에서 앰퍼샌드를 이스케이프 처리해야 합니다.
string="Foo & Bar"
echo "${string//&/\&}";
내가 아직 파악하지 못한 것은왜? 스크립트가 예상대로 작동하지 않는 이유는 무엇입니까? 왜 첫 번째 기호(예: ${string//\&/\&}
) 가 아닌 마지막 & 기호만 이스케이프해야 합니까 ?
이것은 & 기호가 특별한 의미를 갖거나 문자열 교체에 사용된다는 것을 의미합니까?
답변1
여기,&
일치하는 패턴을 나타냅니다.:
patsub_replacement
쉘 활성화 옵션을 사용하는 경우shopt
인용되지 않은&
'' 인스턴스는끈일치하는 부품으로 교체됩니다.무늬. 이는 일반적인sed
관용구를 반복하기 위한 것입니다.
확장 프로그램이 이스케이프되지 않으면 결국 &
"" 자체로 대체됩니다.
이 기능은배쉬 5.2에 추가됨.