実行中の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
アスタリスクは明らかに重要ですが、アスタリスクと@記号の違いは何ですか?さらに、二重引用符を追加する必要があるのはなぜですか?