从用户获取输入到包含空格的路径(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 脚本中获取祖父目录 - 为路径中的目录重命名文件

bash:以空格作为参数传递路径?

在linux中,把指定路径下(包含子目录)中含.sh结尾的文件及目录查找出来,输入到指定文件中,的脚本。

Bash:从作为输入给出的相对路径中获取绝对路径

Shell 常见语法

bash-read使用方法