rm为变量添加额外的反斜杠

时间:2014-02-10 20:42:24

标签: linux bash rm

我正在编写一个非常简单的脚本,它将与我的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

2 个答案:

答案 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就是这样做的,例如)