我刚在儿子的Bash文件中找到了这个编程段。我是一个新手,无法理解printf语法。有人可以在下面的段中解释 COMMENTED printf 吗?
#printf "\033[1;34m"
while [ -d /proc/$PROC ]; do
printf '\033[s\033[u[/] %s\033[u' "$str"; sleep "$delay"
printf '\033[s\033[u[—] %s\033[u' "$str"; sleep "$delay"
printf '\033[s\033[u[\] %s\033[u' "$str"; sleep "$delay"
printf '\033[s\033[u[|] %s\033[u' "$str"; sleep "$delay"
done
#printf '\033[s\033[u%*s\033[u\033[0m' $((${#str}+6)) " " # return to normal(It disappears.)
答案 0 :(得分:0)
它只不过是一个 busy / wait 微调器,并且注释的行什么都不做,只是设置一个蓝色的前景色,最后一行擦除了微调器和文本。 \033
只是字符27
,它是ANSI转义后跟[
的一部分。看到这里Spinner Animation and echo command's'保存光标位置,'u'将光标位置恢复到上次保存的位置 - 你的罚款,没有任何邪恶......(我很确定这正是该代码来自)
更详细:
#printf "\033[1;34m" /* simply sets a blue foreground color */
然后是决赛:
#printf '\033[s\033[u%*s\033[u\033[0m' $((${#str}+6)) " "
\033[s
保存光标位置,
\033[u
恢复上次保存,
'%*s'
普通printf
格式说明符,其中*
字符串表示字段宽度将是由第一个参数
\033[u
恢复到上次保存的位置,
\033[0m
将颜色恢复为默认值。
第一个参数是$((${#str}+6))
用于微调器的打印加上 6个字符的字符串的长度,例如'[ \ ] '
和第二个参数,space
(例如" "
),用于覆盖带空格的行的实际字符串。
它只是删除了旋转器所使用的线。
通过注释这些线条,颜色保留为默认值(第一个注释),最后一行包含字符串,最后一个微调器位置保留在屏幕上(第二个注释printf
)
这是一个ANSI Escape sequences引用,可以进一步解释转义......