2016-10-26 3 views
0

Angenommen, ich habe das folgende Skript:For-Schleife in Bash Maßnahmen zu ergreifen, nur auf erste Positions arg

for arg in "$var1" "$var2" "$var3" "$varN" ; do 
    echo $arg; 
done; 

Was ich zu erreichen versuche, ist do etwas, wenn ich Iterieren und ich bin auf dem ersten Positions Argumente . Ich denke, es wäre etwas wie:

Anfänger mit Bash so gehen Sie Licht auf mich :).

+1

Führen Sie die Aktion für das erste Argument aus und verwenden Sie dann eine for-Schleife für die nachfolgenden Argumente. Es ist lesbarer und weniger Zeilen von Codes zu schreiben. – alvits

+0

@alvits Hat eine Bearbeitung vorgenommen. – theamateurdataanalyst

+0

Das ist keine gute Frage. Die Leute werden dir nur sagen, dass du $ var1 vor der Schleife verarbeiten sollst. Wenn das aus irgendeinem Grund für Sie nicht funktioniert, müssen Sie eine ausführlichere Frage stellen, die eine Erklärung liefert, warum Sie dies innerhalb der Schleife statt vorher tun müssen. – ccarton

Antwort

0

Weisen Sie den ersten Positionsparameter einer Variablen zu. Verwenden Sie dann shift, um es aus den Positionsparametern zu entfernen und die Parameter zu durchlaufen.

firstarg=$1 
# do stuff with $firstarg 
shift # remove first arg 
for arg; do 
    echo "$arg" 
done 
0

Es gibt viele Möglichkeiten, wie Sie damit umgehen können. Sie könnten $ var1 vor der Schleife verarbeiten oder eine Bedingung wie die fügen folgende:

handled_first=false 
for arg in "$var1" "$var2" "$var3" "$varN" ; do 
    if ! $handled_first; then 
    # do stuff 
    handled_first=true 
    continue 
    fi 
    # other stuff 
done 
+0

In Ihrem Code wird '# andere Sachen' auch für' $ var1' ausgeführt. In der Tat wird es alles für '$ var1' tun und wird' # do stuff' für alle anderen überspringen. – alvits

+0

Während '! $ handled_first' ist faszinierend, ich schlage vor, Anfänger nicht damit zu verwechseln, weil es nicht offensichtlich ist, dass _commands_ 'false' und' true' ausgeführt werden. Ich schlage vor, stattdessen eine tatsächliche Bedingung ('[[...]]') zu verwenden - obwohl es lauter ist. – mklement0

+0

@alvits rechts habe ich ein 'continue' hinzugefügt. –

0

Wenn ich dieses Recht und wollen Sie eine Sache zu tun, während auf das erste Argument an ein Skript übergeben, aber eine andere Sache, während auf der Ersetzen

echo $1 
for arg in "${@:2}"; do 
    *action* 
done 

die echo $1 mit dem, was Sie für das erste Argument passieren soll: andere. Das "${@:2}" ist ein Array aller Argumente, die mit dem zweiten beginnen, also können Sie das für die anderen Aktionen verwenden.

Verwandte Themen