使用颜色代码打印

使用颜色代码打印

我想用 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"

答案1

你不能可靠地将命令 + 其参数存储在标量(字符串)变量中。具体来说,如果参数可能包含空格或其他 shell 特殊字符,则:

  • 如果你用双引号括住变量扩展(如您所做的那样),然后参数会因单词拆分和文件名生成而混乱(又名“split + glob”)

  • 如果你用双引号括住扩展名,那么 shell 就无法将字符串拆分为其命令 + 参数。

(在您的情况下,printf $frmt被拆分成 4 个标记:printf '\033[0;49;33m' %s '\e[0m\n'而不是所需的 2 个命令标记printf和一个格式字符串。只要您没有nullglob设置 shell 的选项,如果您省略了格式说明符周围的空格,它就会起作用%s- 但这是不好的做法。)

但是,您可以使用数组可靠地完成此操作:

$ declare -f -p pc
pc ()
{
    local rc="\e[0m";
    local bfcode="\033[0;49;33m";
    local frmt="${bfcode} %s ${rc}\n";
    local _PC=(printf "$frmt");
    "${_PC[@]}" " -s, --with-sequence"
}

我们如何运行存储在变量中的命令?

相关内容