文件名中有空格的脚本有问题

Mil*_*den 12 shell scripting bash quoting escape-characters

我有一个脚本,将 scp 的文件从远程主机传回本地。有时文件名包含空格。scp 不喜欢其文件名中的空格。出于某种原因,我处理空格的尝试没有产生正确的 scp 路径。

代码:

PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg
scp $PATH Me@10.1.10.33:/Users/Me/Desktop
Run Code Online (Sandbox Code Playgroud)

结果是

Cannot find directory: var/root/Documents/MyFile
Cannot find directory: OG-v1.2.3.pkg
Run Code Online (Sandbox Code Playgroud)

将 PATH 括在引号中"$PATH"会产生相同的错误。

为转义空间交换空间也不起作用,尽管据我所知它应该:

ESC_PATH=${PATH/' '/'\ '}
Run Code Online (Sandbox Code Playgroud)

尽管打印转义路径表明编辑有效:

echo $ESC_PATH
> /var/root/Documents/MyFile\ OG-v1.2.3.pkg
Run Code Online (Sandbox Code Playgroud)

Mat*_*teo 20

您应该同时引用声明和用法

path="/var/root/Documents/MyFile OG-v1.2.3.pkg"
scp "$path" Me@10.1.10.33:/Users/Me/Desktop
Run Code Online (Sandbox Code Playgroud)

如果不引用$path第一部分,将只包含第一部分。如果不引用第二个,scp会将每个空格分隔的部分视为一个参数。

(我已更改$PATH为$path因为$PATH是一个重要的保留变量,您不得将其用于一般目的。)