ZSH가 명령에서 경로로 사용되는 변수의 와일드카드를 해석하는 방법

ZSH가 명령에서 경로로 사용되는 변수의 와일드카드를 해석하는 방법

zsh 스크립트를 통해 "*"(와일드카드)가 포함된 변수를 전달하려고 시도했지만 작동하지 않았습니다. ls, grep 및 기타 명령은 "*"가 포함된 경로에 대해 불만을 표시합니다.

다음은 간단한 문제 예입니다.

➜  ~ mkdir -p /tmp/TEST/{22,3}
➜  ~ ls -l /tmp/TEST/*
/tmp/TEST/22:

/tmp/TEST/3:
➜  ~ TEST_PATH="/tmp/TEST/*"
➜  ~ ls -l $TEST_PATH
ls: /tmp/TEST/*: No such file or directory

답변1

다른 sh 유사 쉘과 달리 zsh는 인용되지 않은 변수를 확장할 때 와일드카드 확장 및 토큰화를 수행하지 않습니다. 따옴표가 없으면 $TEST_PATH직관적으로 기대할 수 있는 것과 거의 같습니다. 즉, 변수 값을 간단히 대체하는 것입니다. "거의"는 결과가 빈 단어인 경우 해당 단어가 완전히 제거되기 때문입니다.

변수 값을 가져오고 그 안에 있는 와일드카드 문자를 확장하려면 ${~…}다음 형식을 사용하세요.매개변수 확장: ${~TEST_PATH}중괄호 없이도 쓸 수 있습니다 $~TEST_PATH.

일치하는 항목이 없으면 $~TEST_PATH오류가 발생합니다. 빈 목록을 얻으려면 다음을 사용하십시오.N 글로벌 예선:$~TEST_PATH(N)

관련 정보