자주 사용하는 경로를 환경 변수로 저장한 다음 이 변수를 호출하여 경로 이름을 구성하고 싶습니다.
$ mypath="~/local/bin/"
$ newFile="${mypath}newFile.sh"
$ echo $newFile
~/local/bin/newFile.sh
이것은 작동하는 것 같습니다.
그러나 터치에 대한 입력으로 $newFile을 호출하면 실패합니다.
$ touch $newFile
touch: ~/local/bin/newFile.sh: No such file or directory
$ touch "${mypath}newFile.sh"
touch: ~/local/bin/newFile.sh: No such file or directory
둘 다 작동하지 않습니다. 내가 무엇을 놓치고 있나요?
PS 나는 이것이 논의되었다고 확신하지만 나는 bash를 처음 접했기 때문에 용어가 무엇을 검색해야 하는지 아직 모릅니다. 도움을 주셔서 감사합니다.
답변1
확장 순서로 인해 예상한 대로 작동하지 않습니다.
Bash 매뉴얼에서:
확장 순서는 중괄호 확장, 매개변수 및 변수 확장, 산술 확장, 명령 대체(왼쪽에서 오른쪽으로 수행됨)입니다.
첫 번째 줄에서 ~
따옴표 없이 사용하면 확장됩니다. 실제로 ~
물결표 확장은 변수 확장 전에 수행되므로 따옴표는 내부적으로 확장되지 않으며 나중에 확장되지도 않습니다.
작동하는 것 같다고 썼지만 실제로 echo
출력 결과는 ~/local/bin/newFile.sh
작동하지 않는 것으로 나타났습니다.
값에 공백이 포함되어 인용이 필요한 경우 뒷부분을 인용할 수 있습니다 ~/
.
mypath=~/"local/bin with spaces/"
newFile="${mypath}newFile.sh"
echo "$newFile"
답변2
물론 나는 곧바로 답을 찾았다.
$ newFile="${mypath}newFile.sh"
touch newFile
작동하지 않습니다
$ newFile=${mypath}newFile.sh
touch newFile
실제로 작동한다