Por que o / a seguinte instrução printf
se comportaria de maneira diferente com base em ...? (GNU bash, versão 4.4.18 (1) -release (x86_64-pc-linux-gnu))
printf "%s : %s : %s\n" $TERM ${TERM//[^[:alnum:]]/_} ${TERM//[^[:alnum:]]/?}
Quando em uma sessão de terminal de usuário sem privilégios em tmux
, a saída é:
screen-256color : screen_256color : screen?256color
No entanto, quando em um terminal root
, para a mesma sessão tmux
, a saída é:
xterm-256color : xterm_256color :
Fora de tmux
, a saída é a mesma falha para todos os usuários:
xterm-256color : xterm_256color :
INFORMAÇÕES ADICIONAIS:
Eu apenas tentei a mesma linha de comando, mas substituindo o ponto de interrogação por um asterisco, e as mesmas falhas e sucessos ocorrem. Poderia ser um problema relacionado de alguma forma a globbing? O campo deve ser tratado como um valor de string, não um glob. Então tentei escapar do personagem e obter os seguintes resultados, para os seis casos de asterisco simples, com uma barra invertida, e com duas barras invertidas, para xterm-256color
e screen-256-color
casos mencionados acima:
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