我有以下 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 中使用字符串变量(包含双引号)?
当您使用单引号时,模式被视为文字字符串,因此
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
被扩展。