Sie können die bash
Parametererweiterung verwenden , um einen Bereich anzugeben. Dies funktioniert auch mit Positionsparametern. Für $3
... $n
wä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 $0
mit dem ersten Argument gefüllt ist, 0
während in einem Skript $0
stattdessen der Name des Skripts verwendet wird, wie das zweite Beispiel zeigt. Der Name des Skripts bash
natü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
= 1
usw., während es im zweiten $0
= script_file
, $1
= 0
, $2
= 1
usw. 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:
shift
Ansatz es unmöglich macht, darauf zuzugreifen,$1
und$2
nachdem Sie sie verschoben haben. In Ihrem Skript, das Sie$2
neben dem verwenden$variable_in_question
, müssen Sie entweder das ändern oder den Parametererweiterungsansatz verwenden.