2012-05-02 26 views
16

W powłoce mamy przesunięcie polecenia, ale widziałem na przykład jego zmianę 3Procedura zmiany powłoki - co to jest?

Po co jest liczba po zmianie? i o czym jest? co to robi ?

Przykład:

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 

wyjście będzie:

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

Ale kiedy dodać, że ona go nie wyświetla się poprawnie.

+0

Co wyjście otrzymujesz? –

+0

Zobacz odpowiedzi poniżej. 'shift 3' jest zasadniczo taki sam jak' shift; przesunięcie; shift'. –

Odpowiedz

43

Spójrz na stronie man, który mówi:

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

Przykład skryptu:

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

Run to:

$ myscript.sh one two three four five six 

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

To pokazuje, że po przeniesieniu przez 3 , $1=four, $2=five i $3=six.

1

To byłby odpowiedział po prostu czytając albo Bash manual, lub wpisując man shift:

 shift [n] 

Przesunięcie parametry pozycyjne w lewo o n. Parametry pozycyjne z n + 1 ... $ # są przemianowane na 1 $ ... $ # - n. Parametry reprezentowane przez liczby od $ # do $ # - n + 1 są nieustawione. n musi być liczbą nieujemną mniejszą od lub równą $ #. Jeśli n wynosi zero lub więcej: niż $ #, parametry pozycyjne nie zostaną zmienione. Jeśli n nie jest podane, przyjmuje się, że wynosi 1. Stan powrotu wynosi zero, chyba że n jest równe większe niż $ # lub mniejsze od zera, w przeciwnym razie niezerowe.

+1

Nie jestem pewien, dlaczego, ale nie mam ręcznego wprowadzania zmiany. Być może zależy to od dystrybucji, ale instrukcja bash również ją posiada. – iyrin

2

użyć man bash znaleźć shift wbudowane polecenie:

shift [n]

Parametry pozycyjne od n + 1 ... jest zmieniona na $ 1 .... Parametry reprezentowane przez liczby $ # do $ # - n + 1 są ustawiane jako . n musi być liczbą nieujemną mniejszą lub równą $ #. Jeśli n wynosi 0, żadne parametry nie są zmieniane. Jeśli nie podano n, przyjmuje się, że 1. Jeśli n jest większe niż $ #, parametry pozycyjne nie są zmieniane. Status powrotu jest większy niż zero, jeśli n jest większe niż $ # lub mniejsze od zera; w przeciwnym razie 0.

0

Przesunąć parametry pozycyjne w lewo o n. Parametry pozycyjne od n + 1 ... $ # są przemianowane na 1 $ ... $ # - n. Parametry reprezentowane przez liczby od $ # do $ # - n + 1 są nieustawione. n musi być liczbą nieujemną mniejszą lub równą $ #. Jeśli n jest równe zero lub większe niż $ #, parametry pozycyjne nie są zmieniane. Jeśli n nie zostanie podane, przyjmuje się, że wynosi 1.Status powrotu wynosi zero, chyba że n jest większe niż $ # lub mniejsze od zera, w przeciwnym razie nie jest zero.

  1. przedmiot