使用通配符时出现意外行为

时间:2012-08-20 04:34:27

标签: linux bash ln gnu-coreutils

我打算在此为coreutils提交一个bug,因为这种行为是出乎意料的,在现实世界中没有任何实际用途......虽然它确实让我开玩笑,因为我从来没有甚至知道可以在文件名中创建带有通配符的文件。带有通配符的文件名有多实用?谁甚至使用这样的功能?

我最近运行了一个与此类似的bash命令:

ln -s ../../avatars/* ./

不幸的是,我没有添加正确数量的“../”,因此它不是向我提供信息性错误,而是仅创建一个不存在的“*”文件的链接。我希望这样做:

ln -s "../../avatars/*" ./

因为这是解决此类文件名的正确方法。

在提交coreutils的错误之前,我想要其他人的意见。这种行为是否有任何实际用途,或者是否应该提供有意义的错误消息?

是的,我知道可以链接到整个目录,而不是链接到每个文件,但我不希望将新创建的文件复制到旧位置。现在只有几个文件正在链接。

有些人甚至可能会说在符号链接中使用通配符是不好的做法。但是,我完全知道目录的内容,这比手动手动执行每个文件要快得多。

1 个答案:

答案 0 :(得分:3)

这不是错误。

在shell中,如果使用与任何内容都不匹配的通配符模式,则不替换该模式。例如,如果您这样做:

echo *.c

如果当前目录中没有.c文件,则只打印“* .c”。如果当前目录中有.c文件,则* .c将替换为该列表。

对于许多命令,如果指定不存在的文件则是错误,并且您会收到一条似乎有意义的消息,例如“无法访问* .c”。但对于ln -s,由于它是一个符号链接,实际文件不一定存在,它继续进行并建立链接。

相关问题