次の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
配列への最初の割り当ては、titles
2つの文字列word1 word2
とword1 word2
配列に割り当てられます。
2番目の割り当てには、引用符なしのコマンド置換が含まれます。置換のコマンドは単一の文字列を出力し、置換は引用符で囲まれてい'word1 word2' 'word1 word2'
ないため、シェルは文字列を$IFS
文字単位の単語に分割します(デフォルトでは変数にはスペース、タブ、および改行文字が含まれます)。
文字列を単語に分割すると、結果の単語は、および'word1
(word2'
4つの単語)です。その後、これらの単語は別の要素として配列に割り当てられます。'word1
word2'
titles
これについては、他の質問に対する回答で詳しく説明します。例をご覧ください。