Por que a seguinte printf
declaração 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 não privilegiado em tmux
, a saída é:
screen-256color : screen_256color : screen?256color
No entanto, quando em um root
terminal, para a mesma tmux
sessão, 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ÇÃO ADICIONAL:
Acabei de tentar a mesma linha de comando, mas substituindo o ponto de interrogação por um asterisco, e ocorrem as mesmas falhas e sucessos. Poderia ser um problema relacionado de alguma forma ao globbing? O campo deve ser tratado como um valor de string, não um glob. Em seguida, tentei escapar do caractere e obtive os seguintes resultados, para os seis casos de asterisco simples, com uma barra invertida e com duas barras invertidas, para xterm-256color
os 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
posso reproduzir:
Isso ocorre porque nenhum arquivo corresponde ao padrão
xterm?256color
Soluções:
Cite suas variáveis :
Desative a expansão do nome do arquivo
Desative a
nullglob
opção de shell