`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) 릴리스에서 사용해 보았습니다. 다른 OS에서도 동일할 것으로 예상됩니다.

답변1

아니요, 버그가 아닙니다. 당신은 그것을 보여주었습니다

echo '*'

리터럴을 생성합니다 *. 따라서 이 출력을 다음 명령에 따라 대체하면

TEST=$(echo '*')

*변수에 들어갈 것입니다 $TEST. 그럼 당신이

echo $TEST

여기서 글로브가 확장됩니다. 이 마지막 명령을 실행하고 디렉터리를 변경한 후 다시 실행하여 이를 확인할 수 있습니다.

*당신이 말하면 출력 을 얻을 것입니다

echo "$TEST"

설명대로여기, 큰따옴표를 사용하면 변수가 확장될 수 있지만 glob이 확장되지는 않습니다.

관련 정보