bash 中的高级 printf 解释

advanced printf explanation in bash

我刚刚在我儿子的 Bash 文件中找到了这个编程片段。我是一个新手,无法理解 printf 语法。有人可以向我解释下面部分中的 COMMENTED printf 吗??

#printf "3[1;34m"
while [ -d /proc/$PROC ]; do
    printf '3[s3[u[/] %s3[u' "$str"; sleep "$delay"
    printf '3[s3[u[—] %s3[u' "$str"; sleep "$delay"
    printf '3[s3[u[\] %s3[u' "$str"; sleep "$delay"
    printf '3[s3[u[|] %s3[u' "$str"; sleep "$delay"
done
#printf '3[s3[u%*s3[u3[0m' $((${#str}+6)) " "  # return to normal(It disappears.)

它只不过是一个 busy/wait 微调器,注释行除了设置蓝色前景色外什么都不做,最后删除微调器和文本的行。 3 只是字符 27,它是 ANSI 转义的一部分,后跟 [。请参阅此处 's' 保存光标位置,'u' 将光标位置恢复到上次保存的位置 - 你很好,没有恶意......(我很确定这正是该代码的来源)

更详细:

#printf "3[1;34m"   /* simply sets a blue foreground color */

然后决赛:

#printf '3[s3[u%*s3[u3[0m' $((${#str}+6)) " "
  1. 3[s保存光标位置,

  2. 3[u恢复到上次保存,

  3. '%*s' 正常 printf 格式说明符 对于带有 * 的字符串要注意 字段宽度 将由第一个参数指定,

  4. 3[u恢复到上次保存的位置,

  5. 3[0m return 默认颜色。

第一个参数是 $((${#str}+6)) 您打印的字符串的长度 plus 微调器的 6 个字符,例如'[ \ ] ' 和第二个参数,space(例如 " ")用于实际字符串以用空格覆盖该行。

它只是擦除其中与微调器一起使用的线。

通过注释行,颜色保留为默认值(第一个注释),带有字符串的最后一行和最后一个微调器位置保留在屏幕上(第二个注释 printf

这里是 ANSI Escape sequences 进一步解释转义的参考...