printf 的妙用

这天同事问了一个问题,shell 中如何重复显示指定数目的字符?例如显示 72 个等号(=)作为一个分界线。脑子里马上想到 perl 和 python 中这个实在是太容易了:

$ perl -e "print '=' x 72"
$ python -c "print '=' * 72"

但是 shell 中可没有这样的语法,想了半天,只想到一个利用 printf 命令结合 sed 的做法:

$ printf "%*s" 72 '' | sed 's/ /=/g'

"%*s" 这个 format string 后面的第一个参数是字符串显示宽度,第二个参数才是真正要显示的字符串(这里是空串),与 C 语言中的 printf 类似。

虽然这个 printf 有点妙,不过后面跟了个 sed 才算解决问题,作为一种脚本语言,Shell 有时让人觉得实在是太弱了。应该有更好的解法……

2 Comments so far

  1. wayne, on Jan 4, 2009 at 4:22am, said:

    干嘛非要72个=, 有那么7,8不就ok了...

  2. matt(w), on Jan 4, 2009 at 5:59pm, said:

    一,不可以向问题低头;二,为了美观,呵呵。

Leave a Comment?


« uptime  —  在 optparse 中用 -h 选项 »

Tags

Blogroll

Fairy World | STUPiD | 阅微草堂 | ShelleX | 流浪五天