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

Bash script - variable expansion within backtick/grep regex string

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

我想要替换 $VAR

我匹配的行是这样的:

start..一些字符.....id:.....一些字符.....[variable im searching for]..一些字符。 ...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`

var=`grep -E '^.*id:.*'"$VAR"'.*$' ./input_file.txt`

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