Wie man mehr als 10 Parameter in der Shell behandelt


101

Ich verwende die Bash-Shell unter Linux und möchte mehr als 10 Parameter im Shell-Skript verwenden


8
Beachten Sie, dass 10 Parameter ziemlich verwirrend sind. Vielleicht wäre es besser, stattdessen Optionen (zB -a 1oder --foo=bar) zu verwenden. Siehe man getopt, man getoptsund man bashfür einige Optionen, um dies zu tun.
Mikel

Antworten:


157

Verwenden Sie geschweifte Klammern, um sie hervorzuheben:

echo "${10}"

Sie können die Positionsparameter auch folgendermaßen durchlaufen:

for arg

oder

for arg in "$@"

oder

while (( $# > 0 ))    # or [ $# -gt 0 ]
do
    echo "$1"
    shift
done

2
Beachten Sie, dass $ {10} in Bash funktioniert, aber Ihre Portabilität einschränkt, da viele Implementierungen von sh nur einstellige Spezifikationen zulassen.
William Pursell

1
@William: Es gibt einige Shells, die dies nicht akzeptieren, wie die ursprüngliche Legacy-Bourne-Shell, aber zusätzlich zu den Shells, die ich in einem anderen Kommentar aufgeführt habe (Bash, Dash, ksh und zsh), funktioniert es auch in csh, tcsh und Busybox Asche.
Bis auf weiteres angehalten.

1
@ WilliamPursell ${10}wird von POSIX
Steven Penny

2
Sorgen um die ${10}Arbeit sind nur erforderlich, wenn sehr alte Implementierungen verwendet werden, die nicht dem Standard entsprechen. Wahrscheinlich nur von historischem Interesse ... und doch habe ich es noch nie benutzt! Ich nehme an, weil die Best Practice vorschreibt, dass 10 Argumente viel zu viele sind, wenn sie nicht wiederholt werden. In diesem Fall werden Sie sie durchlaufen, "$@"anstatt sie aufzuzählen.
William Pursell

22

Sie können bis zu 256 Parameter von 0 bis 255 haben mit:

${255}

5
Ich denke, diese Grenze hängt von der Shell ab. Bash, Dash, Ksh und Zsh scheinen es nicht zu haben. sh -c 'echo ${333}' /usr/bin/*
Bis auf weiteres angehalten.

3
Meine Muschel steigt bequem auf 2 Millionenset $(seq 2097152); echo ${2097152}
Steven Penny
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.