my-fish-script a b c d
Say you want to get the all arguments from the second argument onwards, so b c d
.
In bash you can use
In fish, your arguments are contained in the $argv
list. Use list slicing to access a range of elements, e.g. $argv[2..-1]
returns all arguments from the second to the last.
For example
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
You could also use read which is more readable in my opinion:
function loop
echo $argv | read -l count command
for i in (seq 1 $count)
eval $command
end
end
This works better especially when you want to use more than the first argument.
echo $argv | read -l first second rest
The behaviour of the shift
command can be simulated with set -e/--erase VARIABLE_NAME
.
The idea is to erase the first argument, then get the remaining arguments from the $argv
list.
For example
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