我正在对 mint 20 进行代码研究,/lib/lsb/init-functions
只是为了熟悉 SystemV init 系统。
其中有log_action_end_msg
一个函数包含以下代码片段,
TPUT=/usr/bin/tput
if log_use_fancy_output; then
RED=$( $TPUT setaf 1) #=> Step 1
NORMAL=$( $TPUT op) #
/bin/echo -e "${RED}failed${end}${NORMAL}" || true #=> Step 2
else
echo "failed${end}" || true
fi
当变量RED
被赋予值时$( $TPUT setaf 1 )
,我期望 RED 被赋予一个空字符串,因为命令行上的 tput 运行不会打印任何内容。
但是,我看到变量被传递给 echo in,暗示它存储了一些东西。当 tput 不打印任何内容时,如何设置Step 2
变量?RED
(或者)让我们把其他东西放在一边。拿一个新的终端,然后RED=$( $TPUT setaf 1)
在我的终端上运行,我期望终端字体颜色设置为红色,但事实并非如此。只有当我这样做时echo $RED
,它才会变成红色。
为什么 tput 命令没有在替换步骤期间运行,但是在调用时运行echo
。