Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

コマンドを繰り返し実行

次のような、引数に指定されたコマンドを n 回繰り返し実行するスクリプト repeat があるとしよう。

#!/bin/sh

SEQ=/usr/bin/seq
TIMES=$1
shift

T=`$SEQ 1 1 $TIMES`
for i in $T; do
  for COMMAND in "$@"; do
    $COMMAND
  done
done

実行すると次のようになる。

$ repeat 3 "echo hoge"
hoge
hoge
hoge
$ 
$ repeat 2 "echo hoge" "echo piyo"
hoge
piyo
hoge
piyo

しかし、次のような処理を行いたいとすると無理が生じる。

$ repeat 3 "repeat 2 'echo hoge'"
/usr/local/bin/repeat: line 20: 'echo: command not found
/usr/local/bin/repeat: line 20: hoge': command not found
/usr/local/bin/repeat: line 20: 'echo: command not found
  :
  :

解決するにはどうしたらいいでしょうか。