分配给变量时防止波浪号(“〜”)的bash扩展

时间:2019-07-30 14:32:57

标签: bash

我正在尝试通过在bashrc中创建一个SCP(安全副本)功能来使我的生活更轻松:

scpcloud() {
        CP_STR="$(whoami)@${REMOTE_HOST}:"
        CP_STR+=$1
        CP_STR+=" $2"
        scp $CP_STR
}

理想情况下,我应该可以输入类似scpcloud ~/myfileonremote.png myfileonlocal.png的内容。

但是,由于Bash扩展了特殊字符,因此使用中出现了问题:

scpcloud ~/myfileonremote.png myfileonlocal.png

成为:

kenny@remote.host.com:/Users/kenny/myfileonremote.png myfileonlocal.png

这不是我想要的。我希望将波浪号(以及其他任何Bash单词扩展)直接发送到远程主机。因此理想情况下,我的命令应变为:

kenny@remote.host.com:~/myfileonremote.png myfileonlocal.png

我试图通过引用的方式纠正此问题:

CP_STR+='$1'
CP_STR+="$1"

无济于事。有解决方案可以做到这一点吗?

2 个答案:

答案 0 :(得分:1)

不要建立一个字符串(或至少一个单个字符串),不要期望通过分词将其正确地分为两个参数。

scpcloud() {
    scp "$(whoami)@$REMOTE_HOST:$1" "$2"
}

此外,您需要引用波浪号,因为shell会在scpcloud甚至运行之前将其扩展。

scpcloud "~/myfileonremote.png" myfileonlocal.png

答案 1 :(得分:1)

尝试转义波浪号。

 scpcloud \~/myfileonremote.png myfileonlocal.png