文字点混淆,复制所有隐藏文件

文字点混淆,复制所有隐藏文件

当我使用正则表达式复制所有隐藏文件时,它工作正常:

cp -r source/\.[^.]* destination/

它只是复制以点开头的文件.

不过,我还发现了以下作品:

cp -r source/.[^.]* destination/

在正则表达式中,点不是.表示“任何单数字符”吗?那么为什么第二个命令不复制常规文件(非隐藏文件)?为什么命令中的
.按字面解释?cp

答案1

cp以及其余的内置 shell 命令,接受并扩展球状图案而不是正则表达式。它们在某些方面相似,但在很多方面不同。例如,.在 glob 中是文字,而任意单个字符与 匹配?

在这种情况下,你的朋友是man 7 glob

答案2

Bash 根本不使用正则表达式,它使用自己的通配符扩展规则(称为“通配符”)。点只是一个字符,而 '^' 字符将否定后面的任何内容。因此,第一个例子匹配以点开头的文件,后面没有第二个点,下一个例子也一样;没有必要对点进行转义,但无论如何它都会被接受。

编辑:在查看了 Marios 建议的“man 7 glob”之后,我认为我对“^”字符的理解有误。它似乎表示[^.]未定义,而不是非字符。Bash 使用感叹号表示否定。

相关内容