1

在搜索(和学习)bash 模式匹配时,我发现变量中的一美元似乎被解释为其他东西。在 AGENT= 之后引用 $

例如,我试图在以下位置找到“代理”的值:

PAGE1="...&METHOD=GET&AGENT=$SM$NpBsRicQN9x%CBn&TARGET=$SM$https%3a%2f%2fwww..."

使用:

if [[ $PAGE1 =~ ^.*AGENT=([\$a-zA-Z]*) ]]
then
    echo ${BASH_REMATCH[1]}
...

并且第一个 $ 不会被捕获。为什么?

现在正在测试,稍后是来自 cURL 请求的 $PAGE1。

4

1 回答 1

3

之所以如此,是因为您的输入PAGE1定义不正确。

你有这样的:

 PAGE1="...&METHOD=GET&AGENT=$SM$NpBsRicQN9x%CBn&TARGET=$SM$https%3a%2f%2fwww..."

您在作业中使用了双引号,这是一个问题,因为这被解释为;

PAGE1='...&METHOD=GET&AGENT=%CBn&TARGET=%3a%2f%2fwww...'

由于无处不$在,shell 正试图将以下文本扩展为 shell 变量。

您应该使用单引号来避免 shell 扩展。这是正确的分配:

PAGE1='...&METHOD=GET&AGENT=$SM$NpBsRicQN9x%CBn&TARGET=$SM$https%3a%2f%2fwww...'
于 2013-05-11T21:27:39.180 回答