bashでこれら2つの表現が同じではないのはなぜですか?

bashでこれら2つの表現が同じではないのはなぜですか?

次の2つのケースの出力が異なる理由を知りたいです。私は2番目のケースが2であると予想しました。

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

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

答え1

配列への最初の割り当ては、titles2つの文字列word1  word2word1  word2配列に割り当てられます。

2番目の割り当てには、引用符なしのコマンド置換が含まれます。置換のコマンドは単一の文字列を出力し、置換は引用符で囲まれてい'word1  word2' 'word1  word2'ないため、シェルは文字列を$IFS文字単位の単語に分割します(デフォルトでは変数にはスペース、タブ、および改行文字が含まれます)。

文字列を単語に分割すると、結果の単語は、および'word1word2'4つの単語)です。その後、これらの単語は別の要素として配列に割り当てられます。'word1word2'titles

これについては、他の質問に対する回答で詳しく説明します。例をご覧ください。

関連情報