bash中的高级printf解释

时间:2017-11-14 05:32:18

标签: linux bash unix printf ansi-escape

我刚在儿子的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.)

1 个答案:

答案 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)) " "
  1. \033[s保存光标位置,

  2. \033[u恢复上次保存,

  3. '%*s'普通printf 格式说明符,其中*字符串表示字段宽度将是由第一个参数

  4. 指定
  5. \033[u恢复到上次保存的位置,

  6. \033[0m将颜色恢复为默认值。

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

    它只是删除了旋转器所使用的线。

    通过注释这些线条,颜色保留为默认值(第一个注释),最后一行包含字符串,最后一个微调器位置保留在屏幕上(第二个注释printf

    这是一个ANSI Escape sequences引用,可以进一步解释转义......