변수의 별표를 확장하는 `echo $TEST`의 버그인가요? [복사]

변수의 별표를 확장하는 `echo $TEST`의 버그인가요? [복사]

이것은 배쉬 버그입니까?

$ mkdir test && cd test && echo "a" > "some.file"
test$ echo '*'
*
test$ TEST=$(echo '*')
test$ echo $TEST
some.file

두 번째 출력이 *리터럴 출력뿐만 아니라 (모든) 파일 이름을 구문 분석하는 이유는 무엇입니까 *? Bash에 버그가 있는 것 같나요?

Ubuntu 18.04, bash 버전 4.4.19(1) 릴리스를 사용해 보았습니다. 이는 다른 운영 체제에서도 마찬가지일 것으로 예상됩니다.

답변1

아니요, 이것은 버그가 아닙니다. 당신은 증명했습니다

echo '*'

리터럴을 생성하므로 *이 출력을 바꿀 때 다음 명령을 따르십시오.

TEST=$(echo '*')

*변수에 넣어질 것입니다 $TEST. 그럼 당신이 언제

echo $TEST

여기서 세상은 확장될 것이다. 마지막 명령을 실행하고 디렉터리를 변경한 후 다시 실행하여 이를 확인할 수 있습니다.

*당신이 출력을 얻을 것이라고 말하면

echo "$TEST"

설명대로여기, 큰따옴표는 변수 확장을 허용하지만 전역 확장은 허용하지 않습니다.

관련 정보