:"~/데스크탑/TEST.TXT : 해당 파일이나 디렉토리"나는이 스크립트를 서면으로 작성했습니다
이#!/bin/bash
file="~/Desktop/test.txt"
echo "TESTING" > $file
스크립트가 작동하지 않습니다; 그것은 내게이 오류를 준다 :
./tester.sh: line 4: ~/Desktop/test.txt: No such file or directory
내가 뭘 잘못하고 있니?
:"~/데스크탑/TEST.TXT : 해당 파일이나 디렉토리"나는이 스크립트를 서면으로 작성했습니다
이#!/bin/bash
file="~/Desktop/test.txt"
echo "TESTING" > $file
스크립트가 작동하지 않습니다; 그것은 내게이 오류를 준다 :
./tester.sh: line 4: ~/Desktop/test.txt: No such file or directory
내가 뭘 잘못하고 있니?
~
을 $HOME
으로 바꾸어보십시오. 물결표 확장은 물결표가 인용되지 않은 경우에만 발생합니다. info "(bash) Tilde Expansion"
을 참조하십시오.
따옴표없이 file=~/Desktop
을 수행 할 수도 있지만이 중 일부를 필드 구분 기호로 바꾸면 부분적으로 바뀝니다. 변수의 값을 인용하는 것은 아마도 어쨌든 습관에 빠지기에 좋은 일일 것입니다. 변수 file=~/"Desktop"
을 인용해도 작동하지만 오히려 추한 것 같습니다.
$HOME
을 선호하는 또 다른 이유는 가능하면 틸드 확장은 단어의 시작 부분에서만 발생합니다. 따라서 command --option=~/foo
은 command
이 확장 자체를 물결 표시하는 경우에만 작동하며 명령에 따라 달라지며 command --option="$HOME/foo"
은 항상 작동합니다.
와우, 그게 효과가 있습니다! 그게 어떻게 작동하고 내 대본에는 없었던거야? – Mason
답변이 업데이트되었습니다. –
@Mason - 또한 틸드 확장은 변수 확장 이전에 발생하므로'$ file'을'~/Desktop/test.txt'로 변환하면 물결표 확장 단계를 빠뜨린 것입니다. 확장 순서는 http://www.gnu.org/software/bash/manual/bashref.html#Shell- 확장 페이지를 참조하십시오. –
참고로, 당신은 또한 eval
를 사용할 수 있습니다
eval
eval "echo "TESTING" > $file"
는 인수로 명령을 받아 그것은 Tilde expansion을 할 수있는 쉘됩니다.
제목을 좀 더 이해하기 쉽게 변경했습니다. –
[배시에서 작동하지 않는 물결 모양 확장]의 가능한 복제본 (https://stackoverflow.com/questions/5748216/tilde-expansion-not-working-in-bash) – codeforester