Sie können die bashParametererweiterung verwenden , um einen Bereich anzugeben. Dies funktioniert auch mit Positionsparametern. Für $3... $nwäre es:
"${@:3}" # expands to "$3" "$4" "$5" …
"${*:3}" # expands to "$3 $4 $5 …"
Seien Sie sich dessen bewusst $@und $*ignorieren Sie das erste Argument $0. Wenn Sie sich fragen, welche Sie in Ihrem Fall verwenden sollen, ist es sehr wahrscheinlich, dass Sie ein Angebot wünschen $@. Verwenden $*Sie diese Option nur, wenn Sie ausdrücklich nicht möchten, dass die Argumente einzeln in Anführungszeichen gesetzt werden.
Sie können es wie folgt ausprobieren:
$ bash -c 'echo "${@:3}"' 0 1 2 3 4 5 6
3 4 5 6
$ echo 'echo "${@:3}"' >script_file
$ bash script_file 0 1 2 3 4 5 6
2 3 4 5 6
Beachten Sie, dass das erste Beispiel $0mit dem ersten Argument gefüllt ist, 0während in einem Skript $0stattdessen der Name des Skripts verwendet wird, wie das zweite Beispiel zeigt. Der Name des Skripts bashnatürlich ist das erste Argument, nur , dass es normalerweise nicht als solche wahrgenommen - das gleiche gilt für ein Skript ausführbar gemacht und „direkt“ genannt. Im ersten Beispiel haben wir also $0= 0, $1= 1usw., während es im zweiten $0= script_file, $1= 0, $2= 1usw. ist; ${@:3}Wählt jedes Argument aus, das mit beginnt $3.
Einige zusätzliche Beispiele für mögliche Bereiche:
# two arguments starting with the third
$ bash -c 'echo "${@:3:2}"' 0 1 2 3 4 5 6
3 4
# every argument starting with the second to last one
# a negative value needs either a preceding space or parentheses
$ bash -c 'echo "${@: -2}"' 0 1 2 3 4 5 6
5 6
# two arguments starting with the fifth to last one
$ bash -c 'echo "${@:(-5):2}"' 0 1 2 3 4 5 6
2 3
Weitere Lektüre:
shiftAnsatz es unmöglich macht, darauf zuzugreifen,$1und$2nachdem Sie sie verschoben haben. In Ihrem Skript, das Sie$2neben dem verwenden$variable_in_question, müssen Sie entweder das ändern oder den Parametererweiterungsansatz verwenden.