Bash脚本-backtick/grep regex字符串中的变量扩展
我正试图在backticks中,在regex搜索字符串中展开bash脚本中的一个变量 我希望替换Bash脚本-backtick/grep regex字符串中的变量扩展,regex,bash,scripting,grep,Regex,Bash,Scripting,Grep,我正试图在backticks中,在regex搜索字符串中展开bash脚本中的一个变量 我希望替换$VAR 我匹配的行如下所示: start…一些字符….id:…一些字符….[我正在搜索的变量]…一些字符….end var=`grep -E '^.*id:.*$VAR.*$' ./input_file.txt` 这有可能吗 它似乎不起作用。我知道我通常可以用“$VAR”展开变量,但这不就是直接在正则表达式中搜索那些字符吗?我不确定这里的优先级是什么。为了插值变量,需要将表达式用双引号括起来(然后
$VAR
我匹配的行如下所示:
start
…一些字符….id:
…一些字符….[我正在搜索的变量]
…一些字符….end
var=`grep -E '^.*id:.*$VAR.*$' ./input_file.txt`
这有可能吗
它似乎不起作用。我知道我通常可以用
“$VAR”
展开变量,但这不就是直接在正则表达式中搜索那些字符吗?我不确定这里的优先级是什么。为了插值变量,需要将表达式用双引号括起来(然后,转义需要转义的任何内容)
var=$(grep -E "^.*id:.*$VAR.*\$" ./input_file.txt)
(这里不需要反斜杠,但我把它放进去是为了给你一个想法。你的实际表达式可能更复杂。)变量确实以反斜杠展开,但它们不以单引号展开 因此,您需要对正则表达式字符串使用双引号(我不确定您关心的是什么),或者同时使用两个引号 所以
var=`grep -E "^.*id:.*$VAR.*$" ./input_file.txt`
或
另外,您可能希望使用
$(grep…
,而不是反勾号,因为它们是更现代的方法,具有更好的语法属性,并且能够嵌套。避免使用旧的和不推荐的反勾号,请使用以下括号:var=$(grep……txt)
谢谢,我听说$()
更好,虽然我也听说backtick更可能是向后兼容的。这也是真的吗?这个千年中任何合理的东西都应该支持现代语法。我认为即使是HP-UX和AIX。当然,任何有壳的地方都可以。
var=`grep -E '^.*id:.*'"$VAR"'.*$' ./input_file.txt`