扩展$' ...' - 引用字符串中的变量

时间:2018-06-08 17:34:30

标签: shell unix echo vi

我试图在特定行

之后立即追加行
echo $'oSAMPLEINSERT\E:x\n' |vi +/"$search_string" config.txt 

我可以使用变量(例如$ SampleIns)而不是硬编码字符串" SAMPLEINSERT"。有人可以帮忙吗

2 个答案:

答案 0 :(得分:3)

您可以在字符串中间更改引用上下文。 (您的代码实际上已经执行了此操作:+/"$search_string"在未加引号的上下文中展开+/部分,在双引号上下文中展开$search_string

将包含变量的部分放在双引号内,并将需要C样式反斜杠转义处理的部分放在$''内,如下所示:

echo "o${SampleIns}"$'\E:x\n'

如果SampleIns包含反斜杠序列,请事先用printf %b替换它们引用的文字值:

printf -v SampleInsLiteral '%b' "$SampleIns"
echo "o${SampleInsLiteral}"$'\E:x\n'

答案 1 :(得分:1)

ed可能更适合这样的工作。唯一的假设是$searchstring不包含未转义的/

# Make sure the search value is quoted for ed.
# That means verifying that ORACLE_HOME is similarly
# escaped. E.g. ORACLE_HOME='\/usr\/foo\/bar'
searchstring="LoadModule rewrite_module \"${ORACLE_HOME}\/ohs\/modules\/mod_rewrite.so\""
ed config.txt <<EOF
/$searchstring/a
SAMPLEINSERT
.
w
EOF