man procmailrc
说:
变量名 ?? 将此条件的其余部分与此环境变量(不能是伪变量)的值进行匹配。一个特殊情况是如果变量名等于
B
,H
,HB
或BH
;这仅覆盖由该配方上的初始标志定义的默认标题/正文搜索区域。
当使用??
运算符时特例提到的,默认标志的“覆盖”是否仅针对此条件或整个配方的其余部分持续存在?
例如,如果我指定
:0 H
* ^To:.*recipient
* B ?? tribbles
* ^From:.*space
From
是否会因为前一行的覆盖而对 ody 尝试该条件,或者在覆盖行结束后B
标志是否恢复到其初始条件 ( )?H
答案1
覆盖仅在定义它的条件下持续存在。这是一个稍微改变的实验来演示:
pm-test.rc
:0 H
* ^To:.*recipient
* B ?? tribbles
* space
mailbox
测试邮件.txt
From: [email protected]
To: [email protected]
Your storage locker is overflowing with
tribbles. Please clean it out.
请注意,“空格”一词仅出现在上述消息的标题中。
测试邮件2.txt
From: [email protected]
To: [email protected]
We're having some trouble with
tribbles at our space station.
请注意,“空格”一词仅出现在上述消息的正文中。
如果B
覆盖确实不是在其条件结束时到期,pm-test.rc
应成功关于第二条消息,因为“tribbles”在正文中,而“space”(仅)在正文中。
% procmail VERBOSE=on DEFAULT=/dev/null MAILDIR=/tmp pm-test.rc < test-mail2.txt
procmail: Match on "^To:.*recipient"
procmail: Match on "tribbles"
procmail: No match on "space"
procmail: Assigning "LASTFOLDER=/dev/null"
食谱确实不是成功。
相反,如果B
覆盖做在其条件结束时到期,pm-test.rc
应成功在第一条消息上,因为“tribbles”位于正文中,而“space”(仅)位于标题中。
% procmail VERBOSE=on DEFAULT=/dev/null MAILDIR=/tmp pm-test.rc < test-mail.txt
procmail: Match on "^To:.*recipient"
procmail: Match on "tribbles"
procmail: Match on "space"
procmail: Assigning "LASTFOLDER=mailbox"
食谱确实成功。
因此,B
覆盖之后的条件不受所述覆盖的影响。他们重新使用配方的原始标志 ( H
)。