리눅스나 유닉스 기반 시스템에서 프로그램 실행 경로를 지정하는 PATH 환경 변수는 개발자와 사용자 모두에게 필수적인 설정입니다. 하지만 이 PATH를 설정할 때, 홈 디렉터리를 의미하는 틸드(~) 기호를 따옴표 안에 넣으면 예상치 못한 동작을 할 수 있어 주의해야 합니다. 많은 사용자가 `export PATH="$PATH:~/.local/bin/"`처럼 따옴표 안에 틸드를 사용하지만, 이 경우 틸드는 홈 디렉터리로 확장되지 않고 문자 그대로 해석되어 현재 디렉터리 아래의 `./~/.local/bin/` 경로를 가리키게 됩니다. 이는 의도한 경로가 아닌 전혀 다른 곳에서 실행 파일을 찾게 만들어 혼란을 야기할 수 있습니다.
이러한 현상은 셸(Shell)의 틸드 확장 규칙 때문입니다. Bash 문서에 따르면 틸드 확장은 따옴표로 감싸지 않은 틸드 접두사에만 적용됩니다. 즉, `~`가 따옴표로 묶여 있으면 셸은 이를 일반 문자열로 간주하고 확장하지 않습니다. 이 문제를 발견한 사례에서는 샌드박싱 도구인 nono를 사용하던 중 `PATH entries the sandbox can write to: ~/.local/bin/` 경고를 통해 이상을 감지했습니다. 실제로 `./~/.local/bin/` 디렉터리를 만들고 그 안에 실행 파일을 두면, PATH에 `"~/.local/bin/"`이 설정되어 있을 때 해당 실행 파일이 정상적으로 호출되는 것을 확인할 수 있습니다. 이는 홈 디렉터리가 아닌 현재 작업 디렉터리를 기준으로 경로가 해석되었음을 명확히 보여줍니다.
이러한 오작동을 방지하고 안전하게 PATH를 설정하려면 틸드 대신 $HOME 환경 변수를 명시적으로 사용하는 것이 가장 좋습니다. 예를 들어, `export PATH="$PATH:$HOME/.local/bin/"`과 같이 설정하면 틸드 확장 규칙에 얽매이지 않고 항상 사용자의 홈 디렉터리를 정확히 참조할 수 있습니다. 기존에 잘못 설정된 PATH가 있는지 확인하려면 `echo "$PATH" | grep -- '~'` 명령어를 통해 틸드가 포함된 경로를 찾아볼 수 있습니다. 만약 발견된다면 `.bashrc`, `.zshrc`, `.profile` 등 셸 설정 파일을 수정하여 `$HOME` 방식으로 변경해야 합니다. 이처럼 작은 설정 오류가 시스템의 안정성과 보안에 영향을 미칠 수 있으므로, 셸 스크립트 작성 시에는 항상 명시적이고 정확한 경로 지정을 습관화하는 것이 중요합니다.