如何在 grep 中使用字符串变量(包含双引号)

Kal*_*Zen 2 bash grep

我有以下 bash 代码:

DNS_RECORD_NAME="\"_acme-challenge\""
linode-cli domains records-list 1020562 --pretty --json |
            grep '"name": $DNS_RECORD_NAME'
Run Code Online (Sandbox Code Playgroud)

输出应该是这样的:

"name": "_acme-challenge"
Run Code Online (Sandbox Code Playgroud)

但我得到了空的结果。如果我更改以下行

grep '"name": $DNS_RECORD_NAME" 
Run Code Online (Sandbox Code Playgroud)

grep '"name": "_acme-challenge"'
Run Code Online (Sandbox Code Playgroud)

我得到了正确的输出。

但我需要使用变量。如何在 grep 中使用字符串变量(包含双引号)?

sch*_*ity 5

当您使用单引号时,模式被视为文字字符串,因此

grep '"name": $DNS_RECORD_NAME'
Run Code Online (Sandbox Code Playgroud)

将尝试匹配文字字符串

"name": $DNS_RECORD_NAME
Run Code Online (Sandbox Code Playgroud)

变量没有扩展。

为了让它工作,你可以:

grep "\"name\": $DNS_RECORD_NAME"
Run Code Online (Sandbox Code Playgroud)

或者

grep '"name": '"$DNS_RECORD_NAME"
Run Code Online (Sandbox Code Playgroud)

这里变量$DNS_RECORD_NAME被扩展。