이것은 배쉬 버그입니까?
$ 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이 확장되지는 않습니다.