sh%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%EB%B3%84%ED%91%9C%2F%EA%B8%80%EB%A1%9C%EB%B8%8C%EB%A5%BC%20%EC%98%AC%EB%B0%94%EB%A5%B4%EA%B2%8C%20%EC%9D%B4%EC%8A%A4%EC%BC%80%EC%9D%B4%ED%94%84%20%EC%B2%98%EB%A6%AC%ED%95%A9%EB%8B%88%EB%8B%A4..png)
다음과 같은 문제가 있습니다. 와일드카드 문자를 일반 텍스트로 포함하는 환경 변수가 필요하지만 이를 이스케이프할 수 없는 것 같습니다. 백슬래시 이스케이프를 사용하면 작동하지만 어떤 이유로 백슬래시는 여전히 문자열의 일부입니다. "
GLOB_SUBST를 비활성화하면 문제가 해결되지만 이를 방지하고 싶습니다.
문제의 범위를 좁히기 위해 다음 방법을 사용했습니다.
touch foo; chmod +x ./foo
# glob expansion i.E. $test contains all files in the directory.
echo 'export test="*"; echo $test' > foo; source ./foo
# no glob expansion, but the escape character is added to the string.
echo 'export test="\*"; echo $test' > foo; source ./foo
# output: \*
어떤 도움이라도 대단히 감사하겠습니다.
답변1
첫 번째 경우에는 문자열을 *
변수에 할당하고 globsubst
해당 옵션이 활성화되어 있으므로 따옴표가 없는 확장은 $test
POSIX 셸에서와 같이 와일드카드의 영향을 받습니다. 두 번째 경우에는 string 을 할당 \*
하지만 백슬래시가 별표를 이스케이프하므로 glob으로 확장되지 않습니다. (그렇지 않으면 zsh는 비활성화하지 않는 한 일치하는 파일이 없다고 불평합니다. 백슬래시로 시작하는 파일 이름이 없을 수도 있지만 일치하는 glob은 \\*
.)
글로빙을 중지하려면 변수 확장을 인용하십시오(예: echo "$test"
.
바라보다:언제 큰따옴표가 필요합니까?
export
또한 동일한 셸 내에서만(또는 기본 셸과 소스 스크립트 사이에서도) 변수를 사용하려는 경우에는 필요하지 않습니다.