web-dev-qa-db-fra.com

Comment accéder aux arguments restants dans un script de poisson

my-fish-script a b c d

Supposons que vous souhaitiez obtenir tous les arguments à partir du deuxième argument, donc b c d.

En bash, vous pouvez utiliser shift pour vider le premier argument et accéder aux autres avec "$@".

Comment résoudriez-vous le problème en utilisant la coquille de poisson?

30
Dennis

Dans le poisson, vos arguments sont contenus dans le $argv liste. Utilisez le découpage de liste pour accéder à une gamme d'éléments, par exemple $argv[2..-1] renvoie tous les arguments du second au dernier.

Par exemple

function loop --description "loop <count> <command>"
  for i in (seq 1 $argv[1])
    eval $argv[2..-1]
  end
end

Usage

$ loop 3 echo hello world
hello world
hello world
hello world
51
Dennis

Le comportement de la commande shift peut être simulé avec set -e/--erase VARIABLE_NAME.

L'idée est d'effacer le premier argument, puis d'obtenir les autres arguments du $argv liste.

Par exemple

function loop  --description "loop <count> <command>"
  set count $argv[1]
  set --erase argv[1]
  for i in (seq 1 $count)
    eval $argv
  end
end

Usage

$ loop 3 echo hello world
hello world
hello world
hello world
21
Dennis

Vous pouvez également utiliser read qui est plus lisible à mon avis:

function loop
  echo $argv | read -l count command
  for i in (seq 1 $count)
    eval $command
  end
end

Cela fonctionne mieux, surtout lorsque vous souhaitez utiliser plus que le premier argument.

echo $argv | read -l first second rest
11
terje