다음과 같은 문제가 있습니다. 와일드카드 문자를 일반 텍스트로 포함하는 환경 변수가 필요하지만 이를 이스케이프할 수 없는 것 같습니다. 백슬래시 이스케이프를 사용하면 작동하지만 어떤 이유로 백슬래시는 여전히 문자열의 일부입니다. "
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
또한 동일한 셸 내에서만(또는 기본 셸과 소스 스크립트 사이에서도) 변수를 사용하려는 경우에는 필요하지 않습니다.