
다음 두 가지 경우의 출력이 서로 다른 이유를 알고 싶습니다. 나는 두 번째 경우가 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 word2
과 word1 word2
배열에 할당됩니다.
두 번째 할당에는 따옴표 없이 명령 대체가 포함됩니다. 대체의 명령은 단일 문자열을 출력하며 'word1 word2' 'word1 word2'
대체가 따옴표로 묶이지 않았기 때문에 쉘은 문자열을 $IFS
문자 단위의 단어로 분할합니다(기본적으로 변수에는 공백, 탭 및 개행 문자가 포함됩니다).
문자열을 단어로 분할하면 결과 단어는 , 및 'word1
( word2'
4 개 단어)입니다. 그런 다음 이러한 단어는 별도의 요소로 배열에 할당됩니다 .'word1
word2'
titles
이에 대해서는 다른 질문에 대한 답변에서 자세히 설명합니다. 예를 참조하세요: