我正在尝试将数组从正在运行的 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
星号显然很重要,但是它和@符号有什么区别呢?另外为什么要额外加双引号?