我想知道为什么以下两种情况有两种不同的输出。我预计第二种情况是 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'
,并且由于替换未加引号,因此 shell 会将字符上的该字符串拆分$IFS
为单词(默认情况下,该变量包含空格、制表符和换行符)。
当字符串被分割成单词时,生成的单词是'word1
、word2'
、'word1
和word2'
(四个单词)。然后将这些单词作为单独的元素分配给数组titles
。
这一点在其他问题的回答中得到了进一步的解释。参见示例: