$ rm Think\ Python:\ How\ to\ Think\ Like\ a\ Computer
\ Scientist\ 2014.pdf
rm: cannot remove ‘Think Python: How to Think Like a Computer’: No such file or directory
$ Scientist 2014.pdf: command not found
$ rm Think*
$
在第一个中rm
,我使用 bash 中的自动完成功能来指定文件名中包含换行符的文件,但由于换行符,它不起作用。
在第二个中rm
,我使用文件扩展来避免显式指定新行字符。为什么文件扩展可以避免这个问题呢?文件扩展不会扩展为也包含换行符的完整文件名吗?
答案1
对于以 \n, 结尾的文件的 rm rm file*
,正则表达式文件扩展“吃掉”新行作为 rm 参数的一部分,因此 shell 不会看到它,也不会将其解析为命令。
正如 strace 中所见:
$strace rm teste.txt*
execve("/bin/rm", ["rm", "teste.txt\n"],
至于自动完成遵循一组预定义的规则,并且它并不真正期望那里有一个 '\n' 。