【发布时间】:2019-02-01 02:19:43
【问题描述】:
hi 试图用一个长字符串替换下面的字符串:
@x@
使用我从命令行获得的字符串:
read test
sed -i --backup 's/@x@/'${test}'/g' file.json README.md
但它仅适用于 1 个单词, 如果 word 之间有空格,则它不起作用。即使在引号之间
sed: 1: "s/@x@/string test string: unterminated substitute in regular expression
【问题讨论】:
-
变量引用应始终用双引号括起来以避免此类问题。使用类似
sed -i --backup 's/@x@/'"${test}"'/g' file.json README.md或只是sed -i --backup "s/@x@/${test}/g" file.json README.md的东西。 Shellcheck.net 擅长发现此类常见问题。 -
此外,您应该添加一些健全性检查,以便嵌入变量不包含将被解释为 sed 命令一部分的字符。例如,
${test//\//}将使用参数扩展去除正斜杠。