BASH - 带有 space 的文件名传递给 sFTP 未正确解析

BASH - Filename with space passed to sFTP not resolving peroperly

我正在尝试将带空格的文件名传递给将从 sFTP 服务器下载传递的文件名的脚本。我在识别脚本时遇到问题,解析后是一个文件名而不是两个单词。

export tloc=/path/to/target
export usr=username
export svr=host.name.com
export pwd=pass1234
export sloc=/path/to/source
export file="test file_12345.zip"

#-- Perform download of file specified using passed paramters.
sshpass -p $pwd sftp -o StrictHostKeyChecking=no $usr@$svr:$sloc/"$file" $tloc

我了解到当脚本执行时,它会将引号中包含的词解析为一个词,然后删除引号。我在这里错过了什么?在其他语言中,我已经能够嵌套引号或使用一些其他语法来使最终结果如下所示。

sshpass -p pass1234 sftp -o StrictHostKeyChecking=no usernamehost.name.com:/path/to/source/"test file_12345.zip" /path/to/target

如有任何帮助,我们将不胜感激。

这是由于 sftp 的错误功能(错误?)。您在命令行上传递的文件名按原样有效地提供给 sftp 的交互式 "get" 命令,但是 get 命令在 whitespace 上拆分并使用 space 之后的部分作为目的地,忽略你的 $tloc 命令行参数。 你需要一个额外的引用级别来让它做你想做的事:

sshpass -p $pwd sftp -o StrictHostKeyChecking=no $usr@$svr:$sloc/"\"$file\"" $tloc