わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

スライドをGIFアニメーションに

PowerPointで作成し,PNG形式で保存した画像に,それぞれ枠線をつけて,GIFアニメーションにするスクリプトを作成しました.ソースはGistからどうぞ.
一連の作業をするにあたって,「PowerPointで作成し,PNG形式で保存」というのがひと苦労です.PowerPoint 2013であれば,「ファイル」のメニューで,「名前を付けて保存」を選択します.「参照」をクリックして,ファイル名のところは変えず,ファイルの種類のプルダウンは「PNG ポータブル ネットワーク グラフィックス形式(*.png)」に変更してから,保存のボタンを押します.最後に,問い合わせには「すべてのスライド」のボタンを押します.pawapo.pptxという名前で編集していたら,デスクトップの下にpawapoというフォルダが作られ,その中に「スライド1.PNG」から始まるファイルができます.
今回スクリプトを作成していて,びっくりしたことがありました.zsh*1,次のように実行して,iの値が出力されるのでした.

$ for i in {8..10}; printf "%02d\n" i
08
09
10

これは,次のように書くつもりでした.

$ for i in {8..10}; printf "%02d\n" $i
08
09
10

シェルスクリプトを書くとき,「i」と「$i」は明確に区別されます.ですが上のとおり,この2つ,出力は同じになりました.
もしやと思って,which printfを実行すると,やはり「printf: shell built-in command」と出ました.
通常のコマンドで試すと…

$ for i in {8..10}; command printf "%02d\n" i
printf: i: 数値による指定をして下さい
00
printf: i: 数値による指定をして下さい
00
printf: i: 数値による指定をして下さい
00
$ for i in {8..10}; command printf "%02d\n" $i
08
09
10

ということで,zshのビルトイン関数であるprintfでは,変換文字列の引数は,「変数名」でもよいことを知りました.
zshのマニュアルにも当たっておくと,Shell Buildin Commandsのprintfのところに,"With the numeric format specifiers, if the corresponding argument starts with a quote character, the numeric value of the following character is used as the number to print otherwise the argument is evaluated as an arithmetic expression."と説明してありました.

*1:setopt short_loopsを前提としています.