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?
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
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
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