Bash

使用 printf 列印包含 % 百分號的變數會導致“bash: printf: `p’: invalid format character”

  • May 17, 2019

我想用來printf列印一個變數。此變數可能包含%百分號。

最小的例子:

$ TEST="contains % percent"
$ echo "${TEST}"
contains % percent
$ printf "${TEST}\n"
bash: printf: `p': invalid format character
contains $

echo提供所需的輸出。)

printf以正常形式使用:

printf '%s\n' "${TEST}"

來自man printf

SYNOPSIS
printf FORMAT [ARGUMENT]...

切勿將變數傳遞給 FORMAT 字元串,因為它可能會導致錯誤和安全漏洞**。**


順便提一句:

如果您想將%符號作為 FORMAT 的一部分,則需要輸入%%,例如:

$ printf '%d%%\n' 100
100%

您永遠不應該將變數內容放在給定的格式字元串中printf。改用這個:

printf '%s\n' "${TEST}"

引用自:https://unix.stackexchange.com/questions/519315