이 경우 물결표가 홈 폴더로 인식되지 않는 이유는 무엇입니까?

이 경우 물결표가 홈 폴더로 인식되지 않는 이유는 무엇입니까?

이것은 작동하지 않습니다:

$ ls "~/.wine/drive_c/tools/Family Tree v2.0"
ls: cannot access '~/.wine/drive_c/tools/Family Tree v2.0': No such file or directory

그러나 이는 다음과 같습니다.

$ ls "/home/daniel/.wine/drive_c/tools/Family Tree v2.0"
Dossiers                           Dossiers_orig   Infos.opt      Racines.exe  'Register OCX.bat'   racines.CNT
Dossiers-2019.11.03-11.46.tar.gz   Html            REGSVR32.exe   Racines.hlp   Uninst.isu          readme.txt

~와 동일하다고 가정 하면 /home/daniel여기서 무슨 일이 일어나고 있습니까?

답변1

큰따옴표를 사용하더라도 인용하면 물결표 확장이 억제됩니다.

~사용될 수 있다홈 디렉토리의 경로로상황에 따라물결표 확장수행됩니다. ~같지 않다.또는... 실제로 ~홈 디렉토리의 대체 이름으로 사용되는 항목이 파일 시스템에 없습니다 .

~단독으로 또는 경로의 첫 번째 구성 요소로 나타날 때 쉘은 이를 다음으로 확장합니다.절대 경로홈 디렉토리로 이동합니다. 하지만 ~인용할 때는 이런 일이 발생하지 않습니다 .큰따옴표더 약한 형태를 제공인용~보다작은따옴표이는 다른 종류의 작업에 중요합니다.확장, 와 같은매개변수 확장(확장 $HOME). 그러나 큰따옴표도 물결표 확장을 억제합니다.

따라서 ~이 명령에서는 확장되지 않았으며 다음과 같이 인용되었습니다.

ls "~/.wine/drive_c/tools/Family Tree v2.0"

다행스럽게도 일부 부분은 인용되고 일부 부분은 인용되지 않은 주장을 작성하는 것이 허용됩니다. 따라서 ~/따옴표 앞에 넣고 나머지는 그대로 인용할 수 있습니다 .

ls ~/".wine/drive_c/tools/Family Tree v2.0"

또는 매개변수 확장이 큰따옴표에서도 수행되지만 작은따옴표에서는 수행되지 않으므로 다음을 사용할 수 있습니다.

ls "$HOME/.wine/drive_c/tools/Family Tree v2.0"

(기술적으로는 환경 변수가 설정 해제된 경우에도 HOME일부 쉘은 여전히 ​​홈 디렉토리가 무엇인지 파악하고 확장하려고 시도하며 ~그러한 bash쉘 중 하나라는 점에서 다릅니다. 그러나 설정을 해제하는 것은 드물고 권장되지 않습니다 HOME. )


추가 자료:

관련 정보