How to access remaining arguments in a fish script

后端 未结 3 752
失恋的感觉
失恋的感觉 2021-01-31 15:55
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

相关标签:
3条回答
  • 2021-01-31 16:09

    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
    
    0 讨论(0)
  • 2021-01-31 16:11

    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
    
    0 讨论(0)
  • 2021-01-31 16:12

    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
    
    0 讨论(0)
提交回复
热议问题