sedが配列をコピーできませんでした(終了していない 's'コマンド)。

sedが配列をコピーできませんでした(終了していない 's'コマンド)。

実行中のbashスクリプトの配列を外部ファイルにコピーしようとしていますが、sedに問題があります。数時間検索してもまだ答えが見つからなかったので、ここに質問を投稿する必要があると思いました。

ARRAY=( M4d W0rld )

sed '/^#/!s/ARRAY=(.*)/ARRAY=( '${ARRAY[@]}' )/g' test.txt

結果:

sed: -e expression #1, char 31: unterminated `s' command

そして次は:

ARRAY=( M4d W0rld )

sed '/^#/!s/ARRAY=(.*)/ARRAY=( '$ARRAY' )/g' test.txt

期待どおりに動作します。

#test.txt    
ARRAY=( M4d )

上記は私が望むものではありませんが、最初のオプションが失敗するのはなぜですか?

答え1

幸運にも答えを見つけたようです。次のコードは機能します。

ARRAY=( M4d W0rld )

sed '/^#/!s/ARRAY=(.*)/ARRAY=( '"${ARRAY[*]}"' )/g' test.txt

アスタリスクは明らかに重要ですが、アスタリスクと@記号の違いは何ですか?さらに、二重引用符を追加する必要があるのはなぜですか?

関連情報