Iterate through parameters skipping the first

前端 未结 5 1936
野的像风
野的像风 2020-12-24 02:25

Hi i have the following:

bash_script parm1 a b c d ..n

I want to iterate and print all the values in the command line starting from a, not

相关标签:
5条回答
  • 2020-12-24 02:32

    You can "slice" arrays in bash; instead of using shift, you might use

    for i in "${@:2}"
    do
        echo "$i"
    done
    

    $@ is an array of all the command line arguments, ${@:2} is the same array less the first element. The double-quotes ensure correct whitespace handling.

    0 讨论(0)
  • 2020-12-24 02:35

    This method will keep the first param, in case you want to use it later

    #!/bin/bash
    
    for ((i=2;i<=$#;i++))
    do
      echo ${!i}
    done
    

    or

    for i in ${*:2} #or use $@
    do
      echo $i
    done
    
    0 讨论(0)
  • 2020-12-24 02:44

    Another flavor, a bit shorter that keeps the arguments list

    shift
    for i in "$@"
    do
      echo $i
    done
    
    0 讨论(0)
  • 2020-12-24 02:50

    You can use an implicit iteration for the positional parameters:

    shift
    for arg
    do
        something_with $arg
    done
    

    As you can see, you don't have to include "$@" in the for statement.

    0 讨论(0)
  • 2020-12-24 02:53

    This should do it:

    #ignore first parm1
    shift
    
    # iterate
    while test ${#} -gt 0
    do
      echo $1
      shift
    done
    
    0 讨论(0)
提交回复
热议问题