2012-05-02 7 views
16

In der Shell haben wir den Befehl shift, aber ich sah auf ein Beispiel seine geben shift 3Shell-Shift-Verfahren - Was ist das?

Warum gibt es eine Nummer nach der Schicht? und worum geht es? Was es macht ?

Beispiel:

echo “arg1= $1 arg2=$2 arg3=$3” 
shift 
echo “arg1= $1 arg2=$2 arg3=$3” 
shift 
echo “arg1= $1 arg2=$2 arg3=$3” 
shift 
echo “arg1= $1 arg2=$2 arg3=$3” 
shift 

Der Ausgang wird sein:

arg1= 1 arg2=2 arg3=3 
arg1= 2 arg2=3 arg3= 
arg1= 3 arg2= arg3= 
arg1= arg2= arg3= 

Aber wenn ich hinzufügen, dass, es nicht richtig angezeigt.

+0

Welche Leistung bekommen Sie? –

+0

Siehe Antworten unten. 'shift 3' ist im Wesentlichen dasselbe wie' shift; Verschiebung; Verschiebung ". –

Antwort

43

einen Blick auf die Seite man nehmen, die sagt:

shift [n] 
    The positional parameters from n+1 ... are renamed to $1 .... 
    If n is not given, it is assumed to be 1. 

Ein Beispielscript:

#!/bin/bash 
echo "Input: [email protected]" 
shift 3 
echo "After shift: [email protected]" 

Run it:

$ myscript.sh one two three four five six 

Input: one two three four five six 
After shift: four five six 

Dies zeigt, dass durch 3 nach der Verschiebung , $1=four, $2=five und $3=six.

1

Dies würde einfach man shift durch das Lesen entweder die Bash manual oder die Eingabe zu beantworten:

 shift [n] 

verschieben sich die Positionsparameter auf die von n links. Die positionellen Parameter von n + 1 ... $ # werden in $ 1 ... $ # - n umbenannt. Die Parameter , dargestellt durch die Zahlen $ # bis $ # - n + 1, sind nicht gesetzt. n muss eine nicht negative Zahl kleiner oder gleich $ # sein. Wenn n 0 oder größer als 0 ist, werden die Positionsparameter nicht geändert. Wenn n nicht ist, wird es als 1 angenommen. Der Rückgabestatus ist Null, es sei denn, n ist größer als $ # oder kleiner als Null, andernfalls ungleich Null.

+1

Nicht sicher warum, aber ich habe keinen manuellen Eintrag für Schicht. Vielleicht hängt es von der Distribution ab, aber das Bash-Handbuch hat es auch. – iyrin

2

Sie verwenden man bash den shift builtin Befehl zu finden:

Verschiebung [n]

Die Positionsparameter von n + 1 ... umbenannt zu $ ​​1 .... Parameter dargestellt durch die Zahlen $ # bis $ # - n + 1 sind nicht gesetzt. n muss eine nicht negative Zahl kleiner oder gleich $ # sein. Wenn n 0 ist, werden keine Parameter geändert. Wenn n nicht angegeben wird, wird als 1 angenommen. Wenn n größer als $ # ist, werden die positionellen Parameter nicht geändert. Der Rückgabestatus ist größer als Null, wenn n größer als $ # oder kleiner als Null ist; sonst 0.

0

Verschieben Sie die Positionsparameter um n nach links. Die Positionsparameter von n + 1 ... $ # werden in $ 1 ... $ # - n umbenannt. Parameter, die durch die Zahlen $ # bis $ # - n + 1 dargestellt werden, sind nicht gesetzt. n muss eine nicht negative Zahl kleiner oder gleich $ # sein. Wenn n null oder größer als $ # ist, werden die Positionsparameter nicht geändert. Wenn n nicht geliefert wird, wird angenommen, dass es 1 ist.Der Rückgabestatus ist Null, es sei denn, n ist größer als $ # oder kleiner als Null, andernfalls ungleich Null.

  1. Liste item