my-fish-script a b c d
たとえば、2番目の引数以降のすべての引数を取得する場合は、b c d
とします。
Bashでは、shift
を使用して最初の引数をダンプし、"$@"
を使用して残りの引数にアクセスできます。
魚の殻を使用して問題をどのように解決しますか?
Fishでは、引数は$argv
リストに含まれています。リストのスライスを使用して、要素の範囲にアクセスします。 $argv[2..-1]
は、2番目から最後までのすべての引数を返します。
例えば
function loop --description "loop <count> <command>"
for i in (seq 1 $argv[1])
eval $argv[2..-1]
end
end
使用法
$ loop 3 echo hello world
hello world
hello world
hello world
shift
コマンドの動作は、set -e/--erase VARIABLE_NAME
でシミュレートできます。
最初の引数を消去してから、残りの引数を$argv
リストから取得するという考え方です。
例えば
function loop --description "loop <count> <command>"
set count $argv[1]
set --erase argv[1]
for i in (seq 1 $count)
eval $argv
end
end
使用法
$ loop 3 echo hello world
hello world
hello world
hello world
私の意見ではより読みやすいreadを使用することもできます:
function loop
echo $argv | read -l count command
for i in (seq 1 $count)
eval $command
end
end
これは、特に最初の引数以上のものを使用したい場合によりよく機能します。
echo $argv | read -l first second rest