前のコマンドをN回繰り返します。

前のコマンドをN回繰り返します。

ループを書く以外に、最後のコマンドをN回繰り返す方法はありますか?

たとえば、最後のコマンドを二重性(!!)を使用して1回繰り返すことができますが、30回繰り返すとどうなりますか?

ベストアンサー1

zsh最後のコマンドラインにコマンド、パイプ、 and-or のリストが 1 つしかない場合 (たとえば、 or またはecho xループecho x | tr x yなどecho x && echo yの複合コマンドですが、そうでない場合) と を使用します。{ x; y; }forwhileecho x; echo y

repeat 30 !!

前のコマンドラインを繰り返すには(複数のコマンドが含まれている場合でも)、次を使用します。

repeat 30 do !!; done

または:

repeat 30 {!!}

bash単純なコマンド(上記の例では場合のみ)に対してのみ、echo x次のヘルパー関数を定義できます。

repeat() {
  local n="$1"
  shift
  while ((n-- > 0)); do
    "$@"
  done
}

(そしてrepeat 30 !!上記のように使用します)。副作用は、コードが関数内で実行されるために異なるように表示され、"$@"その"$#"ような操作がtypeset異なる動作をするため、次のことができないことです。

eval 'echo "$1"'
repeat 30 !!

シミュレートする別の方法は、エイリアスを宣言することzshです。たとえば、次のようになります。repeat 30 {!!}

alias repeat='for i in $(seq'

(修正がないと仮定$IFS

次に、次を使用します。

repeat 30); { !!; }

おすすめ記事