从用户获取输入到包含空格的路径(bash脚本)[重复]
Posted
技术标签:
【中文标题】从用户获取输入到包含空格的路径(bash脚本)[重复]【英文标题】:Get input from user to path which contains a space (bash-script) [duplicate] 【发布时间】:2021-11-03 17:08:46 【问题描述】:我需要提示用户从服务器到我的计算机的 SCP 文件夹路径。
因为我知道文件夹名称中有一个空格(很遗憾,不能省略),所以我尝试让它工作,但我做不到。
目前我有
#copy.sh
read -r -p "Plot date: " plot_date
scp -r user@server:/home/user/Documents/projects/pages/$plot_date Plots/
我知道plot_date
的形式是yyyy-mm-dd hh.mm
,例如2021-09-06 10.51
,但这不起作用,例如:
./copy.sh
Plot date: 2021-09-06 10.51
user@server's password: *******
scp: /home/user/Documents/projects/pages/2021-09-06: No such file or directory
cp: cannot stat '17.10': No such file or directory
看起来,它把日期和时间分开了。
我尝试包含一些基于this SO 答案的双引号,即
#copy.sh
read -r -p "Plot date: " plot_date
scp -r user@server:/home/user/Documents/projects/pages/"$plot_date" Plots/
抛出几乎相同的错误
scp: /home/user/Documents/projects/pages/2021-09-06: No such file or directory
scp: 17.10: No such file or directory
我尝试将输入保存到另一个变量中并使用它(省略路径中的字符串)
read -r -p "Plot date: " plot_date
p_date="$plot_date"
scp -r user@server:/home/user/Documents/projects/pages/$p_date Plots/
这会引发与上面相同的错误。
最后我尝试将整个路径放在一个字符串中,即
read -r -p "Plot date: " plot_date
p_date="$plot_date"
scp -r "user@server:/home/user/Documents/projects/pages/$plot_date" Plots/
引发与底部 2 个错误相同的错误。
现在我真的没有东西可以尝试了
编辑:
答案here 是关于用户输入的,它强制用户输入为2021-09-09\ 17\.51
。我想在脚本中进行处理,即让用户能够只写 2021-09-06 17.51
作为输入
【问题讨论】:
有点——问题是我想在脚本中而不是在输入中这样做(这迫使用户将其写为2021-09-06\ 10\.51
)
看答案用参数展开自动转义空格。
【参考方案1】:
如果两端都使用bash,可以使用@Q
参数扩展:
read -r -p "Plot date: " plot_date
scp -r user@server:/home/user/Documents/projects/pages/"$plot_date@Q" Plots/
$parameter@operator Parameter transformation. The expansion is either a transforma‐ tion of the value of parameter or information about parameter itself, depending on the value of operator. Each operator is a single letter: Q The expansion is a string that is the value of parameter quoted in a format that can be reused as input.
【讨论】:
以上是关于从用户获取输入到包含空格的路径(bash脚本)[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 bash 脚本中获取祖父目录 - 为路径中的目录重命名文件