다음 명령문이 다음에 따라 다르게 동작하는 이유는 무엇 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