I am trying to decrypt a file in a script with gpg batch mode, but command is not executed because the passphrase contains a !echo m!pass|gpg --batch --passphrase-fd 0 --decrypt-file plain.gpgbash: !pass: event not foundorgpg --batch --passphrase m!pass -d plain.gpg bash: !pass: event not foundI guess bash is interpreting the exclamation mark as a reference to the command execution history.Which would be the right way to do it in GPG batch mode?
Decrypt file using gpg in batch mode when passphrase includes a !?
bash;quoting;gpg
Use single quotes instead of double:$ echo m!passbash: !pass: event not found$ echo 'm!pass'm!passThis is quite nicely explained in the bash manual (emphasis added):Single QuotesEnclosing characters in single quotes (') preserves the literal  value of each character within the quotes. A single quote may not  occur between single quotes, even when preceded by a backslash.Double QuotesEnclosing characters in double quotes () preserves the literal  value of all characters within the quotes, with the exception of $,  , \, and, when history expansion is enabled, !. The characters  $ and  retain their special meaning within double quotes (see  Shell Expansions). The backslash retains its special meaning only when  followed by one of the following characters: $, `, , \, or  newline. Within double quotes, backslashes that are followed by one of  these characters are removed. Backslashes preceding characters without  a special meaning are left unmodified. A double quote may be quoted  within double quotes by preceding it with a backslash. If enabled,  history expansion will be performed unless an ! appearing in double  quotes is escaped using a backslash. The backslash preceding the !  is not removed.