如何在 Linux 中转义命令行或 shell 脚本中的保留字符?

如何在 Linux 中转义命令行或 shell 脚本中的保留字符?

众所周知,字符(!)是保留的,奇怪的是它对普通用户有效,但不能以root身份工作,我尝试了一些方法来解决我的问题,但没有成功,我想知道是否可以转义这些字符。

我尝试执行的命令很简单,只是忽略一些特定文件。

 mkdir --parents www/; mv !(init.sh|environment.sh|docs|www) $_

答案1

这与逃避角色无关!

shellksh实现了一些扩展的通配模式,它!(...|...|...)就是其中之一。该模式匹配与括号中的任何模式都不匹配的任何内容。

有些 shell 能够使用ksh通配模式。例如,extglobbashshell ( ) 中设置 shell 选项可以启用这些功能,就像在shell ( ) 中shopt -s extglob设置 shell 选项一样。KSH_GLOBzshsetopt KSH_GLOB

您的 root 用户使用的 shell 显然不支持使用ksh通配模式,并且不清楚它是否能够(dash例如,shell 不具备此功能)。另一方面,您的普通用户似乎默认启用了这些模式,要么通过运行实际的kshshell,通过在 shell 初始化文件中显式启用正确的 shell 选项,要么通过使用某些第三方扩展来悄悄地启用这些模式。默认情况下启用 shell 选项。

相关内容