2014-02-10 3 views
1

아주 간단한 스크립트를 작성합니다. git 저장소와 상호 작용할 것이지만 다음과 같은 이유를 파악할 수없는 지점에 도달했습니다.rm 변수에 백 슬래시를 추가했습니다.

갖는

~/보관/공유/알렉스 \ & 재료/file.zip

그러나이 RM 실패 :

destPath='~/Dropbox/Shared/Alex\&Stuff' 
destFile='file.zip' 

#git archive --format zip --output $destFile master 

echo $destPath/$destFile 

rm $destPath/$destFile 

에코는 올바른 경로를 출력 다음과 같습니다 :

rm: cannot remove ‘~/Dropbox/Shared/Alex\\&Stuff/file.zip’: No such file or directory

따라서 rm이 실행될 때 여분의 백 슬래시가 추가되는 이유는 무엇입니까? Alex\$Stuff 대신 Alex\\$Stuff?

답변

7

~ 문자는 외부 따옴표가 expnded 할 수 있어야 :

destPath=~/Dropbox/Shared/Alex\&Stuff 

destFile='file.zip' 

#git archive --format zip --output $destFile master 

echo "$destPath/$destFile" 

rm "$destPath/$destFile" 
+0

언제나처럼 벙어리 실수. 감사합니다 – Alex

+1

환영합니다. 다행입니다. 나는 내 코드에서 여러 번 비슷한 실수를 저질렀고 디버깅하는데 몇 시간을 보냈다. – anubhava

1

destPath="$HOME/Dropbox/Shared/Alex\&Stuff" 

Tildas는 항상 $ HOME으로 확장하지 않습니다보십시오. 그리고 실제 백 슬래시가 없으면 앰퍼샌드에는 백 슬래시가 필요하지 않습니다.

더블 백 슬래시에 대해서는 rm이 내부 문자열을 따옴표로 묶어 놓은 것입니다 (예 : 백 슬래시는 특별한 의미가 있으며 백 슬래시는 '\'로 작성해야합니다. 예를 들어 C가 이런 식으로 수행합니다.)

+1

죄송합니다, 이것은 추측 게임이 아닙니다. 당신이 대답을 안했거나하지 않았습니까? 그렇지 않으면 의견을 게시하십시오. – arkascha

+0

"앰퍼샌드에는 작은 따옴표 안에 백 슬래시가 필요 없습니다." –

+0

bash에서 큰 따옴표 안에 백 슬래시가 필요하지 않습니다. 인용되지 않은 경우에만 필요합니다. – PSkocik

관련 문제