我需要将一些 sed 表达式存储在一个变量中并将其替换为 sed 命令。
myArgs="-e 's/foo/bar/' -e 's/foo2/bar2/'"
到目前为止,这些都不起作用:
echo "foo" | sed ${myArgs}
# sed: -e expression #1, char 1: unknown command: `''
echo "foo" | sed $(echo ${myArgs})
# sed: -e expression #1, char 1: unknown command: `''
echo ${myArgs}
's/foo/bar/' -e 's/foo2/bar2/'
# 1st -e missing
参数扩展解释变量中的第一个 -e 参数。
-e 可以解释为存在的测试,或回显的参数。
我怎样才能防止这种情况并将其用于 sed 命令?
澄清一下,这只是一个命令的简化版本,它将包含大量带有需要在正则表达式中转义的字符的 sed 表达式,我宁愿保持原样引用的表达式,并将所有 sed 表达式转储到sed 命令作为单个变量。
如果那不可能,我将使用不同的方法,例如下面的当前答案,但是似乎应该有一些内置的 bash 方法来不预先扩展变量,而只是在使用之前将其解释为字符串在最后的 sed 命令中。
我使用的实际参数看起来像这样:
-e 's/^>chr1.*/>NC_032089.1_chr1/' -e 's/^>chr2.*/>NC_032090.1_chr2/'
带有未知字符串