![ZSH가 명령에서 경로로 사용되는 변수의 와일드카드를 해석하는 방법](https://linux55.com/image/171641/ZSH%EA%B0%80%20%EB%AA%85%EB%A0%B9%EC%97%90%EC%84%9C%20%EA%B2%BD%EB%A1%9C%EB%A1%9C%20%EC%82%AC%EC%9A%A9%EB%90%98%EB%8A%94%20%EB%B3%80%EC%88%98%EC%9D%98%20%EC%99%80%EC%9D%BC%EB%93%9C%EC%B9%B4%EB%93%9C%EB%A5%BC%20%ED%95%B4%EC%84%9D%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
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)