Как получить доступ к остальным аргументам в рыбе script
my-fish-script a b c d
Предположим, что вы хотите получить все аргументы из второго аргумента, поэтому b c d
.
В bash вы можете использовать shift
для вывода первого аргумента и доступа к остальным с помощью "[email protected]"
.
Как бы вы решили проблему с помощью оболочки рыбы?
Ответы
Ответ 1
В рыбе ваши аргументы содержатся в списке $argv
. Используйте разрез списка для доступа к диапазону элементов, например. $argv[2..-1]
возвращает все аргументы от второго до последнего.
Например
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
Ответ 2
Поведение команды 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
Ответ 3
Вы также можете использовать чтение, которое более читаемо, на мой взгляд:
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