$ a='"apple","ball","cat"'
$ a='['$a
$ echo $a
["apple","ball","cat"
$ a=$a']'
$ echo $a
b
b
결과를 기대하고 있었는데 결과가 나와서 당황스럽네요 ["apple,"ball","cat"]
. 내가 여기서 무엇을 놓치고 있는 걸까요?
이것은 bash
Mac의 쉘에서 가져온 것입니다. CentOS 7에서도 볼 수 있지만 Fedora에서는 볼 수 없습니다. 누군가 이것을 설명할 수 있나요?
답변1
b
현재 디렉터리에 같은 이름의 파일이 있습니다.
[...]
패턴 일치 표현식입니다. [
이름이 및 사이에 단일 문자로 구성된 모든 파일 과 일치합니다 ]
.
*
이는 값에 따옴표 없이 변수를 사용하는 것과 유사합니다 .
답변2
Hauke는 왜 이런 일이 발생하는지 대답했습니다. 나중에 참고할 수 있도록 다음 방법으로 문제를 해결할 수도 있습니다 strace
.
$ touch a b l
$ a='["apple","ball"]'
$ strace -e trace=execve echo $a
execve("/bin/echo", ["echo", "a", "b", "l"], [/* 82 vars */]) = 0
a b l
+++ exited with 0 +++
또는 다음을 사용하여 set -x
:
$ set -x; echo $a
+ set -x
+ echo a b l
a b l
즉시 명확하지 않을 수도 있지만 적어도 셸이 인용되지 않은 변수를 항목 목록으로 변환한 것을 보면 파일 이름 확장이 발생했음을 추론할 수 있습니다.