为什么/将以下printf
语句的行为基于...而有所不同?(GNU bash,版本 4.4.18(1)-release (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 :
附加信息:
我只是尝试了相同的命令行,但是用星号替换了问号,并且发生了相同的失败和成功。这可能是一个与通配符有关的问题吗?该字段应该被视为字符串值,而不是 glob。然后我尝试转义字符并得到以下结果,对于上面提到的六种星号普通情况,一个反斜杠和两个反斜杠,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
我可以重现:
那是因为没有文件与模式匹配
xterm?256color
解决方案:
引用你的变量:
关闭文件名扩展
关闭
nullglob
外壳选项