当分配给变量时,防止tilde(";~";)的bash扩展
我试图通过在我的bashrc中创建一个SCP(安全复制)函数来简化我的生活:当分配给变量时,防止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会扩
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扩展。谢谢