web-dev-qa-db-ja.com

fishスクリプトの残りの引数にアクセスする方法

my-fish-script a b c d

たとえば、2番目の引数以降のすべての引数を取得する場合は、b c dとします。

Bashでは、shiftを使用して最初の引数をダンプし、"$@"を使用して残りの引数にアクセスできます。

魚の殻を使用して問題をどのように解決しますか?

30
Dennis

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
51
Dennis

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
21
Dennis

私の意見ではより読みやすい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
11
terje