bash4:将文件路径括在双引号内时,cp 命令无法看到文件

mrj*_*per 0 bash cp quoting

考虑以下终端输出(在 .sh 文件中)

kagura@mylaptop1 : ~
=> sudo cp -a "$_source/*.txt" $_destination/Other/
Password:
cp: /home/myuser/*.txt: No such file or directory
08:06:13 Thu Jun 14
kagura@mylaptop1 : ~
=> sudo cp -a $_source/*.txt $_destination/Other/
08:06:33 Thu Jun 14
kagura@mylaptop1 : ~
Run Code Online (Sandbox Code Playgroud)

带双引号的失败,而没有成功运行的。

我的印象是在路径/文件方面双引号是安全的,因为路径或文件可能有空格。

谢谢您的帮助

pLu*_*umo 7

*扩展到文件夹中的文件名,"*"而不扩展。

但是您的“印象”是正确的,您应该引用所有您不能 100% 确定其中没有空格的部分。

您可以混合引用和未引用的部分:

sudo cp -a "$_source"/*.txt "$_destination"/Other/
Run Code Online (Sandbox Code Playgroud)

  • 还要注意,如果`*.txt` 扩展为包含有空格的文件,这不会对`cp`造成任何问题:shell 在文件名扩展之前进行了分词,并且不会在扩展后进行第二轮分词。图案被扩展。请参阅 https://www.gnu.org/software/bash/manual/bash.html#Shell-Expansions (3认同)