Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当分配给变量时,防止tilde(";~";)的bash扩展_Bash - Fatal编程技术网

当分配给变量时,防止tilde(";~";)的bash扩展

当分配给变量时,防止tilde(";~";)的bash扩展,bash,Bash,我试图通过在我的bashrc中创建一个SCP(安全复制)函数来简化我的生活: scpcloud() { CP_STR="$(whoami)@${REMOTE_HOST}:" CP_STR+=$1 CP_STR+=" $2" scp $CP_STR } 理想情况下,我应该能够键入类似于scpcloud~/myfileonremote.png myfileonlocal.png的内容 但是,在这种用法中会出现一个问题,因为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

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

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

我试图通过引用以下内容来纠正这个问题:

CP_STR+='$1'
CP_STR+="$1"
无济于事。有没有一种解决方案可以做到这一点?

不要构建一个字符串(或者至少是一个字符串),并期望通过分词将其正确地分解为两个参数

scpcloud() {
    scp "$(whoami)@$REMOTE_HOST:$1" "$2"
}
此外,您还需要引用tilde,因为shell在
scpcloud
运行之前会对其进行扩展

scpcloud "~/myfileonremote.png" myfileonlocal.png
不要构建一个字符串(或者至少是一个字符串),并期望通过分词将其正确地分解为两个参数

scpcloud() {
    scp "$(whoami)@$REMOTE_HOST:$1" "$2"
}
此外,您还需要引用tilde,因为shell在
scpcloud
运行之前会对其进行扩展

scpcloud "~/myfileonremote.png" myfileonlocal.png

尝试转义平铺键

 scpcloud \~/myfileonremote.png myfileonlocal.png

尝试转义平铺键

 scpcloud \~/myfileonremote.png myfileonlocal.png

最可靠的方法是避免在脚本中使用~。我认为这只是为了方便。最可靠的方法是避免在脚本中使用~。我认为这只是为了方便。很遗憾,我们不能阻止函数本身内部的平铺扩展。谢谢。很遗憾,我们不能阻止函数本身内部的tilde扩展。谢谢