通配符在 zsh 中失败,但在 bash 中有效

通配符在 zsh 中失败,但在 bash 中有效

我在 bash 中有一个别名,我正在尝试将其移植到 zsh。我认为这可能是别名本身,但现在看来只是通配符。

grep -irl --exclude=\*.{log,class,fuegoclass,dat}* --exclude-dir={build,system,lib} data

在 zsh 中排除这些文件扩展名和目录的正确方法是什么?

答案1

在:

grep -irl --exclude=\*.{log,class,fuegoclass,dat}* --exclude-dir={build,system,lib} data

zshand中bash--exclude=\*.{log,class,fuegoclass,dat}*首先扩展到--exclude=\*.log* --exclude=\*.class* --exclude=\*.fuegoclass* --exclude=\*.dat*,然后,由于未加引号*,每个都被视为执行通配符的模式。

例如,--exclude=\*.log*将扩展到当前目录中名称以--exclude=*.log.

如果任何 glob 在 中不匹配,则zsh命令将被中止。在 中bash,球体将扩展到自身。

在这里,您不需要通配符,因此您应该引用所有通配符字符(在 和 中zshbash只是zsh善意地指出您的错误)。

grep -irl --exclude=\*.{log,class,fuegoclass,dat}\* --exclude-dir={build,system,lib} data

相关内容