Bash脚本 - 反引号/ grep正则表达式字符串中的变量扩展

krb*_*686 3 regex bash scripting grep

我正在尝试在正则表达式搜索字符串内部的反引号内部扩展我的bash脚本中的变量.

我希望$VAR被替换.

我匹配的线条如下:

start....一些人物...... id:一些人物[variable im searching for]......一些人物......end

var=`grep -E '^.*id:.*$VAR.*$' ./input_file.txt`
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

它似乎不起作用.我知道我可以正常扩展变量"$VAR",但这不会直接搜索正则表达式中的那些字符吗?我不确定这里优先考虑的是什么.

Eta*_*ner 6

变量确实在反引号中扩展,但它们不会在单引号中扩展.

所以你需要为你的正则表达式字符串使用双引号(我不确定你对它的关注是什么)或使用两个引号.

所以要么

var=`grep -E "^.*id:.*$VAR.*$" ./input_file.txt`
Run Code Online (Sandbox Code Playgroud)

要么

var=`grep -E '^.*id:.*'"$VAR"'.*$' ./input_file.txt`
Run Code Online (Sandbox Code Playgroud)

此外,您可能希望使用$(grep ...)而不是反引号,因为它们是更现代的方法,并且具有更好的语法属性以及能够嵌套.

  • 从这个千年开始,任何合理的东西都应该支持现代语法.我认为甚至是HP-UX和AIX.当然,外壳是Bash的任何东西. (2认同)