`${$(pwd)}`가 zsh에서 현재 작업 디렉토리를 출력하는 이유는 무엇입니까?

`${$(pwd)}`가 zsh에서 현재 작업 디렉토리를 출력하는 이유는 무엇입니까?

zsh에서 ${$(pwd)}현재 디렉터리를 출력합니다. 그러나 을 실행하면 echo ${/path/to/somewhere}빈 줄만 표시됩니다. 왜 이런 일이 발생합니까? 감사해요!

답변1

내 생각엔 당신이 print ${$(pwd)}그런 것에 대해 말하는 것 같아요, 그렇죠?!

현재 작업 디렉토리로 의 확장은 ${$(pwd)}언뜻 보기에는 이상해 보일 수 있지만 예상되는 동작입니다. 명령 대체가 $(pwd)먼저 평가되고 그 결과가 다음과 같이 사용된다고 생각하여 속이지 마십시오.변수 이름... 아니요, 다음과 같이 사용됩니다.변수 값 다음과 같이 man zshexpn설명합니다.

${name} 매개변수 이름의 값(있는 경우)이 대체됩니다.

(...) 위 대신에 ${...}타입 매개변수 표현식이나 타입 명령 대체를 사용하면 먼저 확장되어 그 결과가 의 값인 것처럼 사용됩니다 . (...) with 형식은 다음에 설명된 플래그와 함께 사용하면 유용한 경우가 많습니다. 아래 예를 참조하세요.$(...)namename$(...)

(...) 플래그 f는 큰따옴표로 묶인 대체를 한 줄씩 분할하는 데 유용합니다. 예를 들어, ${(f)"$(<file)"}각 행이 결과 배열의 요소가 되도록 분할된 파일의 내용을 대체합니다.

두 번째 예입니다. 나는 이것이 패턴 대체 구문이라고 생각합니다.

${name/pattern/repl} 매개변수 이름 확장에서 가능한 가장 긴 패턴 일치를 문자열 repl로 바꿉니다. (...)

먼저 이 예를 참조하세요.

$ foo=hello
$ print ${foo/hello/good/bye}
good/bye

생략하는 경우 비어 있는 변수에서 검색 및 바꾸기를 수행하도록 foo지시합니다 .zsh${}

$ print ${}

$

-- 따라서 ${/something/foo/bar}빈 문자열도 반환됩니다.

관련 정보