대시로 시작하는 CLI 매개변수와 함께 사용할 때 물결표(~)가 확장되지 않는 이유는 무엇입니까?

대시로 시작하는 CLI 매개변수와 함께 사용할 때 물결표(~)가 확장되지 않는 이유는 무엇입니까?

VNC 서버(x0vncserver)를 실행하려고 몇 시간을 허비했는데 클라이언트가 이상한 메시지와 함께 연결을 거부했습니다.

No password configured for VNC Auth

서버도 이 오류를 인쇄합니다.

 SVncAuth:    opening password file '~/.vnc/passwd' failed

글쎄, 나는 물결표가 쉘이나 x0vncserver에 의해 확장되지 않는다는 것을 깨달을 때까지 많은 시간을 낭비했습니다. 그런 다음 이 테스트를 실행했습니다.

$ echo --PasswordFile=~/.vnc/passwd
--PasswordFile=~/.vnc/passwd

하지만

$ echo PasswordFile=~/.vnc/passwd
PasswordFile=/home/tichomir/.vnc/passwd

왜 그런 겁니까? 인수가 대시로 시작하는 경우 쉘이 물결표 확장을 거부하는 이유는 무엇입니까? 물결표는 인용되지 않는 한 항상 확장될 것이라고 생각했는데, 분명히 또 다른 규칙이 있는 것 같은데요?

답변1

bash이는 쉘 매뉴얼에 설명된 기능입니다.

단어가 간단한 명령에 대한 인수로 나타날 때 Bash는 변수 할당 조건을 충족하는 단어에 대해 물결표 확장도 수행합니다(위의 인수에서 설명한 대로). posix 모드에서 Bash는 위에 나열된 선언 명령을 제외하고는 이 작업을 수행하지 않습니다.

이것은 의미한다bash ~ 할 것이다물결표는 변수 할당처럼 보이는 매개변수 PasswordFile=~/.vnc/passwd이므로 문자열에서 물결표를 확장하세요 .echo

문자열은 유효한 변수 이름이 아니기 --PasswordFile=~/.vnc/passwd때문에 변수 할당처럼 보이지 않습니다 .--PasswordFile

POSIX 모드에서 실행할 때는 이 작업 을 수행하지 않으며, or 와 같은 다른 쉘에서는 bash기본적으로 이 작업 zsh을 수행하지 않습니다 (그러나 인용되지 않은 등호( ) 숫자 확장자 뒤에 물결표를 수행하는 옵션이 있습니다 ).kshyashzshmagicequalsubst=

현재 사용자의 홈 디렉터리 경로가 명령 인수의 일부로 올바르게 확장되었는지 확인하려면 $HOME물결표 대신 다음 값을 사용하세요.

echo --PasswordFile="$HOME/.vnc/passwd"

매뉴얼에 언급된 "위에 나열된 명령문 명령"은 내장 명령 alias, declare, typeset, export, readonly및 입니다 local.

관련 정보