bash에서 이 두 표현이 동일하지 않은 이유는 무엇입니까?

bash에서 이 두 표현이 동일하지 않은 이유는 무엇입니까?

다음 두 가지 경우의 출력이 서로 다른 이유를 알고 싶습니다. 나는 두 번째 경우가 2일 것으로 예상했습니다.

localhost:~$ titles=('word1  word2' 'word1  word2')
localhost:~$ echo "${#titles[@]}"
2

localhost:~$ titles=($(echo "'word1  word2' 'word1  word2'"))
localhost:~$ echo "${#titles[@]}"
4

답변1

배열에 대한 첫 번째 할당은 titles두 문자열 word1  word2word1  word2배열에 할당됩니다.

두 번째 할당에는 따옴표 없이 명령 대체가 포함됩니다. 대체의 명령은 단일 문자열을 출력하며 'word1  word2' 'word1  word2'대체가 따옴표로 묶이지 않았기 때문에 쉘은 문자열을 $IFS문자 단위의 단어로 분할합니다(기본적으로 변수에는 공백, 탭 및 개행 문자가 포함됩니다).

문자열을 단어로 분할하면 결과 단어는 , 및 'word1( word2'4 개 단어)입니다. 그런 다음 이러한 단어는 별도의 요소로 배열에 할당됩니다 .'word1word2'titles

이에 대해서는 다른 질문에 대한 답변에서 자세히 설명합니다. 예를 참조하세요:

관련 정보