我想从 bash 脚本中写一些彩色文本,但字符串" -s, --with-sequence"
没有被打印出来。
local rc="\e[0m"
local bfcode="\033[0;49;33m"
local frmt="${bfcode} %s ${rc}\n"
local _PC="printf $frmt"
$_PC " -s, --with-sequence"
我想从 bash 脚本中写一些彩色文本,但字符串" -s, --with-sequence"
没有被打印出来。
local rc="\e[0m"
local bfcode="\033[0;49;33m"
local frmt="${bfcode} %s ${rc}\n"
local _PC="printf $frmt"
$_PC " -s, --with-sequence"
您无法将命令 + 其参数可靠地存储在标量(字符串)变量中。特别是,如果参数可能包含空格或其他 shell 特殊字符,则:
如果你不双引号变量扩展(正如你所做的那样),那么参数会因分词和文件名生成而受到破坏(又名“split + glob”)
如果你对扩展进行双引号,那么 shell 不能将字符串拆分为它的命令 + 参数。
(在您的情况下,
printf $frmt
被拆分为 4 个标记:printf '\033[0;49;33m' %s '\e[0m\n'
而不是所需的 2 个printf
命令标记和一个格式字符串。只要您没有nullglob
设置 shell 的选项,如果您省略了格式说明符周围的空格%s
- 但这是不好的做法。)但是,您可以使用数组可靠地做到这一点:
请参阅我们如何运行存储在变量中的命令?