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)