ループを書く以外に、最後のコマンドをN回繰り返す方法はありますか?
たとえば、最後のコマンドを二重性(!!)を使用して1回繰り返すことができますが、30回繰り返すとどうなりますか?
ベストアンサー1
zsh
最後のコマンドラインにコマンド、パイプ、 and-or のリストが 1 つしかない場合 (たとえば、 or またはecho x
ループecho x | tr x y
などecho x && echo y
の複合コマンドですが、そうでない場合) と を使用します。{ x; y; }
for
while
echo 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); { !!; }