You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本如何处理含空格用户输入路径完成SCP文件夹跨服务器传输

问题原因

你遇到的报错本质是scp的参数会经历两次shell解析:

  1. 第一次是本地运行脚本的shell做解析,你加的单层双引号只能避免本地阶段的路径分词
  2. 第二次是远程服务器的shell会对收到的路径再做一次分词,此时路径里的空格没有被包裹/转义,就会被拆成两个独立路径
解决方案

方案1:两层引号嵌套(适配你的固定场景)

直接在变量外层再加一层单引号,让远程端shell识别到空格属于路径的一部分:

# copy.sh
read -r -p "Plot date: " plot_date
scp -r "user@server:/home/user/Documents/projects/pages/'$plot_date'" Plots/

方案2:自动转义特殊字符(通用兼容性更强)

如果文件夹名可能包含引号、感叹号等其他特殊字符,用printf %q自动转义所有特殊字符更稳妥:

# copy.sh
read -r -p "Plot date: " plot_date
printf -v escaped_date '%q' "$plot_date"
scp -r "user@server:/home/user/Documents/projects/pages/$escaped_date" Plots/

两种方案都不需要用户手动输入转义符,正常输入yyyy-mm-dd hh.mm格式的内容即可正常运行。


内容的提问来源于stack exchange,提问作者CutePoison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:54:03