众所周知,字符(!)是保留的,奇怪的是它对普通用户有效,但不能以root身份工作,我尝试了一些方法来解决我的问题,但没有成功,我想知道是否可以转义这些字符。
我尝试执行的命令很简单,只是忽略一些特定文件。
mkdir --parents www/; mv !(init.sh|environment.sh|docs|www) $_
答案1
这与逃避角色无关!
。
shellksh
实现了一些扩展的通配模式,它!(...|...|...)
就是其中之一。该模式匹配与括号中的任何模式都不匹配的任何内容。
有些 shell 能够使用ksh
通配模式。例如,extglob
在bash
shell ( ) 中设置 shell 选项可以启用这些功能,就像在shell ( ) 中shopt -s extglob
设置 shell 选项一样。KSH_GLOB
zsh
setopt KSH_GLOB
您的 root 用户使用的 shell 显然不支持使用ksh
通配模式,并且不清楚它是否能够(dash
例如,shell 不具备此功能)。另一方面,您的普通用户似乎默认启用了这些模式,要么通过运行实际的ksh
shell,通过在 shell 初始化文件中显式启用正确的 shell 选项,要么通过使用某些第三方扩展来悄悄地启用这些模式。默认情况下启用 shell 选项。