Подтвердить что ты не робот

Как получить доступ к остальным аргументам в рыбе script

my-fish-script a b c d

Предположим, что вы хотите получить все аргументы из второго аргумента, поэтому b c d.

В bash вы можете использовать shift для вывода первого аргумента и доступа к остальным с помощью "[email protected]".

Как бы вы решили проблему с помощью оболочки рыбы?

4b9b3361

Ответ 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