![bash "패턴 교체"는 특정 상황에서만 실패합니다.](https://linux55.com/image/129431/bash%20%22%ED%8C%A8%ED%84%B4%20%EA%B5%90%EC%B2%B4%22%EB%8A%94%20%ED%8A%B9%EC%A0%95%20%EC%83%81%ED%99%A9%EC%97%90%EC%84%9C%EB%A7%8C%20%EC%8B%A4%ED%8C%A8%ED%95%A9%EB%8B%88%EB%8B%A4..png)
다음 명령문이 다음에 따라 다르게 동작하는 이유는 무엇 printf
입니까? (GNU bash, 버전 4.4.18(1)-릴리스(x86_64-pc-linux-gnu))
printf "%s : %s : %s\n" $TERM ${TERM//[^[:alnum:]]/_} ${TERM//[^[:alnum:]]/?}
권한이 없는 사용자 터미널 세션에 있을 때 tmux
출력은 다음과 같습니다.
screen-256color : screen_256color : screen?256color
그러나 터미널에서 root
동일한 tmux
세션에 대한 출력은 다음과 같습니다.
xterm-256color : xterm_256color :
이 외부에서는 tmux
모든 사용자에 대한 출력이 동일한 실패입니다.
xterm-256color : xterm_256color :
추가 정보:
방금 동일한 명령줄을 시도했지만 물음표를 별표로 바꾸었고 동일한 실패와 성공이 발생했습니다. 와일드카드 관련 문제일 수 있나요? 이 필드는 전역 값이 아닌 문자열 값으로 처리되어야 합니다. 그런 다음 문자를 이스케이프 처리하려고 시도했고 위에서 언급한 및 사례에 대해 하나의 백슬래시와 두 개의 백슬래시가 있는 별표 일반의 6가지 경우에 대해 다음과 같은 결과를 얻었습니다 xterm-256color
.screen-256-color
printf "%s : %s : %s\n" $TERM ${TERM//[^[:alnum:]]/_} ${TERM//[^[:alnum:]]/*}
screen-256color : screen_256color : screen*256color
xterm-256color : xterm_256color :
printf "%s : %s : %s\n" $TERM ${TERM//[^[:alnum:]]/_} ${TERM//[^[:alnum:]]/\*}
screen-256color : screen_256color : screen*256color
xterm-256color : xterm_256color :
printf "%s : %s : %s\n" $TERM ${TERM//[^[:alnum:]]/_} ${TERM//[^[:alnum:]]/\\*}
screen-256color : screen_256color : screen\*256color
xterm-256color : xterm_256color : xterm\*256color
답변1
나는 재현할 수 있습니다:
$ printf "%s : %s : %s\n" $TERM ${TERM//[^[:alnum:]]/_} ${TERM//[^[:alnum:]]/?}
xterm-256color : xterm_256color :
일치하는 파일이 없기 때문입니다.무늬 xterm?256color
해결책:
-
$ printf "%s : %s : %s\n" "$TERM" "${TERM//[^[:alnum:]]/_}" "${TERM//[^[:alnum:]]/?}" xterm-256color : xterm_256color : xterm?256color
파일 이름 확장자 끄기
$ (set -f; printf "%s : %s : %s\n" $TERM ${TERM//[^[:alnum:]]/_} ${TERM//[^[:alnum:]]/?}) xterm-256color : xterm_256color : xterm?256color
nullglob
셸 옵션 끄기$ (shopt -u nullglob; printf "%s : %s : %s\n" $TERM ${TERM//[^[:alnum:]]/_} ${TERM//[^[:alnum:]]/?}) xterm-256color : xterm_256color : xterm?256color