将 GPG 密码短语发送到 Perl 脚本时转义括号

Escaping parentheses when sending GPG passphrase to a Perl script

我在使用从 cron 调用的 Perl 脚本时遇到一些困难。

脚本的参数之一是 GPG 密码。稍后将其插入到发送到 shell.

的字符串中

此特定密码包含一个左括号,脚本失败并出现 "syntax error near unexpected token `(" 错误。

这是该短语的冒犯部分:

m3(ÃÝ4úŤ;:q!

在脚本中使用该值之前,我曾尝试对其进行单引号和双引号,但这没有效果。

当直接从 shell 调用 GPG 时,该短语工作正常,只是当它被插入到以下内容中时:

`gpg --passphrase $gpgpp --batch -o $gpgofile -d $file`;

其中 $gpgpp 是密码变量。

转义这个字符和其他可能有问题的字符的正确方法是什么?

用引号括起变量:

gpg --passphrase "$gpgpp" --batch -o "$gpgofile" -d "$file"

否则,shell 将尝试将变量的内容解释为表达式。

\Q\E 转义序列用于转义它们之间的所有 "special" 个字符。

`gpg --passphrase \Q$gpgpp\E --batch -o $gpgofile -d $file`;

只要您有一个可能包含需要转义的字符的变量,就应该这样做。

http://perldoc.perl.org/functions/quotemeta.html