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