我正在编写一个非常简单的脚本,它将与我的git存储库进行交互,但我已经达到了一个目的,我无法弄清楚为什么会发生以下情况。
有:
destPath='~/Dropbox/Shared/Alex\&Stuff'
destFile='file.zip'
#git archive --format zip --output $destFile master
echo $destPath/$destFile
rm $destPath/$destFile
echo输出正确的路径:
〜/升降梭箱/共享/亚历克斯\&安培;东西/ file.zip
但是rm失败了以下内容:
rm: cannot remove ‘~/Dropbox/Shared/Alex\\&Stuff/file.zip’: No such file or directory
那么,为什么在执行rm
时会添加额外的反斜杠? Alex\\$Stuff
代替Alex\$Stuff
?
答案 0 :(得分:7)
Tilde角色需要在引号之外进行扩展:
destPath=~/Dropbox/Shared/Alex\&Stuff
destFile='file.zip'
#git archive --format zip --output $destFile master
echo "$destPath/$destFile"
rm "$destPath/$destFile"
答案 1 :(得分:1)
尝试
destPath="$HOME/Dropbox/Shared/Alex\&Stuff"
Tildas并不总是扩展到$ HOME。而&符号不需要反斜杠,除非你想要一个实际的反斜杠。
对于双反斜杠,我猜这就是rm
引用其内部字符串的方式(即反斜杠具有特殊含义,单个反斜杠需要写为'\' - C就是这样做的,例如)