2013-06-03 2 views
0

PS1 = '$ PWD'를 설정하면 명령 줄에 현재 디렉토리의 경로 ( /home/myname)가 표시되고 디렉토리를 변경할 때 변경됩니다.작은 따옴표/큰 따옴표 ksh

하지만 "$ PWD"(큰 따옴표)로 변경하면 현재 내가 어디에 있든 상관없이 항상/home/myname이 표시됩니다. 필자가 읽은 바로는 작은 따옴표는 정확히 무엇이 들어 있는지 인쇄하고 $와 같은 특수 기호는 확장하지 않는다고 말합니다. 그런데 왜 그렇게 작동합니까?

답변

1

"$ PWD"는 즉시 해결됩니다. 따라서 근본적으로 PS1을 고정 값 (PWD가 설정된 시점의 값)으로 설정합니다. '$ PWD'로 설정하면 즉시 해결되지 않으므로 사용하면 해결되고 디렉토리를 변경하면 변경됩니다. 따라서 작은 따옴표는 사용하지 않지만 큰 따옴표는 예상대로 확장됩니다 (고정 문자열로).

+0

예, 그렇지만 왜 자습서에서 작은 따옴표로 그 안에 정확히 무엇이 인쇄되어 있다고 말합니까? 그래서 '$ PWD'는 "$ PWD"를 인쇄해야합니까? – CuriousGuy

+0

작은 따옴표로 묶으면 현재 쉘/명령과 관련하여 해결되지 않지만 이중 따옴표를 사용하면 현재 쉘/명령에서 해결할 수 있습니다. 현재 쉘/명령은 값을 읽는 후속 쉘 조작이 아닌 "PS1 변수 값 설정"입니다. 큰 따옴표를 사용하는 것은 말 그대로 "set PS1 =/a/b/c"를 쓰는 것과 같습니다. 작은 따옴표를 사용하면 "set 명령 중 값을 해석하지 마십시오"라는 메시지가 표시됩니다. 프롬프트가 표시 될 때 나중에 해결되므로 결과가 변경됩니다. – user1676075

0

PS1은 특별한 변수입니다. ksh 맨 페이지에서 :

PS1 The value of this variable is expanded for parameter expansion, 
     command substitution, and arithmetic substitution to define the 
     primary prompt string which by default is ``$''. [...] 

따라서 프롬프트가 표시되기 전에 PS1의 값이 특별 처리됩니다. 작은 따옴표를 사용하는 경우, PS1의 값이 단지 문자열 $P입니다D W 하지만 프롬프트가 필요한 경우 프롬프트가 현재 디렉토리를 얻을 수 있도록, KSH 추가 변수를 확장합니다.