2011-12-07 3 views
33

:"~/데스크탑/TEST.TXT : 해당 파일이나 디렉토리"나는이 스크립트를 서면으로 작성했습니다

#!/bin/bash 

file="~/Desktop/test.txt" 
echo "TESTING" > $file 

스크립트가 작동하지 않습니다; 그것은 내게이 오류를 준다 :

./tester.sh: line 4: ~/Desktop/test.txt: No such file or directory 

내가 뭘 잘못하고 있니?

+0

제목을 좀 더 이해하기 쉽게 변경했습니다. –

+0

[배시에서 작동하지 않는 물결 모양 확장]의 가능한 복제본 (https://stackoverflow.com/questions/5748216/tilde-expansion-not-working-in-bash) – codeforester

답변

53

~$HOME으로 바꾸어보십시오. 물결표 확장은 물결표가 인용되지 않은 경우에만 발생합니다. info "(bash) Tilde Expansion"을 참조하십시오.

따옴표없이 file=~/Desktop을 수행 할 수도 있지만이 중 일부를 필드 구분 기호로 바꾸면 부분적으로 바뀝니다. 변수의 값을 인용하는 것은 아마도 어쨌든 습관에 빠지기에 좋은 일일 것입니다. 변수 file=~/"Desktop"을 인용해도 작동하지만 오히려 추한 것 같습니다.

$HOME을 선호하는 또 다른 이유는 가능하면 틸드 확장은 단어의 시작 부분에서만 발생합니다. 따라서 command --option=~/foocommand이 확장 자체를 물결 표시하는 경우에만 작동하며 명령에 따라 달라지며 command --option="$HOME/foo"은 항상 작동합니다.

+0

와우, 그게 효과가 있습니다! 그게 어떻게 작동하고 내 대본에는 없었던거야? – Mason

+1

답변이 업데이트되었습니다. –

+4

@Mason - 또한 틸드 확장은 변수 확장 이전에 발생하므로'$ file'을'~/Desktop/test.txt'로 변환하면 물결표 확장 단계를 빠뜨린 것입니다. 확장 순서는 http://www.gnu.org/software/bash/manual/bashref.html#Shell- 확장 페이지를 참조하십시오. –

1

참고로, 당신은 또한 eval를 사용할 수 있습니다

eval
eval "echo "TESTING" > $file" 

는 인수로 명령을 받아 그것은 Tilde expansion을 할 수있는 쉘됩니다.

관련 문제