我想压缩某个目录中的一大堆文件夹,每个文件夹创建一个 zip 文件。为此,我使用以下命令:
$ find -maxdepth 1 -mindepth 1 -type d | xargs -I@ zip -r @.zip @
这按预期工作。
但是,偶然地,我注意到当我用作#
替换字符串而不是@
:
$ find -maxdepth 1 -mindepth 1 -type d | xargs -I# zip -r #.zip #
zip error: Invalid command arguments (cannot write zip file to terminal)
zip error: Invalid command arguments (cannot write zip file to terminal)
... and so on (the same message repeated for every folder)
#
通常会打开评论,所以很明显这里出了问题。但我原以为命令行实际上会变成find -maxdepth 1 -mindepth 1 -type d | xargs -I
,因为第一个(包括)第一个的所有内容#
都是注释并且被剥离。
但是,它显然执行了zip
命令。为什么?
注释(在
bash
shell 中)由#
字符引入。但这仅在#
字符未加引号且单词中的第一个字符(标记)时才会发生。如果
#
被引用或作为单词中第一个字符以外的字符出现,则不会引入注释。相比:
在交互式 shell 中,如果shell 选项关闭(默认为打开) ,则永远不会引入注释。
interactive_comments