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

星号显然很重要,但是它和@符号有什么区别呢?另外为什么要额外加双引号?

相关内容