So durchlaufen Sie Argumente in einem Bash-Skript

16

Ich möchte ein Bash-Skript mit einer unbekannten Anzahl von Argumenten schreiben.

Wie kann ich diese Argumente durchgehen und etwas damit anfangen?

Ein falscher Versuch würde so aussehen:

#!/bin/bash
for i in $args; do 
    echo $i
done
rubo77
quelle

Antworten:

28

Dafür gibt es eine spezielle Syntax:

for i do
  printf '%s\n' "$i"
done

Im Allgemeinen ist die Liste der Parameter des aktuellen Skripts oder der aktuellen Funktion über die spezielle Variable verfügbar $@.

for i in "$@"; do
  printf '%s\n' "$i"
done

Beachten Sie, dass Sie die doppelten Anführungszeichen verwenden müssen $@, da sonst die Parameter eine Platzhaltererweiterung und Feldaufteilung erfahren. "$@"ist magisch: Trotz der doppelten Anführungszeichen wird es in so viele Felder erweitert, wie Parameter vorhanden sind.

print_arguments () {
  for i in "$@"; do printf '%s\n' "$i"; done
}
print_arguments 'hello world' '*' 'special  !\characters' '-n' # prints 4 lines
print_arguments ''                                             # prints one empty line
print_arguments                                                # prints nothing
Gilles 'SO - hör auf böse zu sein'
quelle
5
#! /usr/bin/env bash
for f in "$@"; do
  echo "$f"
done

Sie sollten in Anführungszeichen setzen, $@da Argumente Leerzeichen (oder Zeilenumbrüche usw.) enthalten können, wenn Sie sie in Anführungszeichen setzen oder mit einem Escapezeichen versehen \. Beispielsweise:

./myscript one 'two three'

Das sind aufgrund der Anführungszeichen eher zwei als drei Argumente. Wenn Sie nicht zitieren $@, werden diese Argumente im Skript aufgeteilt.

Übelsuppe
quelle
2
Es gibt eine Abkürzung dafürfor f; do ...
Glenn Jackman