2012-05-02 20 views
16

En shell tenemos el comando shift, pero vi en algún ejemplo su cambio 3Procedimiento de cambio de shell - ¿Qué es esto?

¿Por qué hay un número después del cambio? y de qué se trata? Que hace ?

Ejemplo:

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 

La salida será:

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

Pero cuando agrego que, no mostrarlo correctamente.

+0

Qué salida se puede conseguir? –

+0

Ver respuestas a continuación. 'shift 3' es esencialmente lo mismo que' shift; cambio; shift'. –

Respuesta

43

Echa un vistazo a la página man, que dice:

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

un script de ejemplo:

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

Run que:

$ myscript.sh one two three four five six 

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

Esto demuestra que después de desplazar por 3 , $1=four, $2=five y $3=six.

1

esto sería respondió simplemente leyendo bien el Bash manual, o escribiendo man shift:

 shift [n] 

Shift los parámetros de posición hacia la izquierda por n. Los parámetros posicionales de n + 1 ... $ # se renombran a $ 1 ... $ # - n. Los parámetros representados por los números $ # a $ # - n + 1 están desactivados. n debe ser número no negativo menor o igual que $ #. Si n es cero o mayor que $ #, los parámetros posicionales no se cambian. Si n no es suministrado, se supone que es 1. El estado de retorno es cero a menos que n sea mayor que $ # o menor que cero, distinto de cero en caso contrario.

+1

No estoy seguro por qué, pero no tengo una entrada manual para el turno. Tal vez depende de la distribución, pero el manual bash también lo tiene. – iyrin

2

que utilizan man bash para encontrar el shift orden interna:

de desplazamiento [n]

Los parámetros de posición de n + 1 ... se cambia el nombre a $ 1 .... Parámetros representado por los números $ # hasta $ # - n + 1 son unset. n debe ser un número no negativo menor o igual que $ #. Si n es 0, no se cambian los parámetros. Si no se proporciona n, se supone que es 1. Si n es mayor que $ #, los parámetros de posición no se modifican. El estado de devolución es mayor que cero si n es mayor que $ # o menor que cero; de lo contrario 0.

0

Cambie los parámetros posicionales hacia la izquierda por n. Los parámetros posicionales de n + 1 ... $ # se renombran a $ 1 ... $ # - n. Los parámetros representados por los números $ # a $ # - n + 1 están desarmados. n debe ser un número no negativo menor o igual a $ #. Si n es cero o mayor que $ #, los parámetros posicionales no cambian. Si n no se proporciona, se supone que es 1.El estado de retorno es cero a menos que n sea mayor que $ # o menor que cero, de lo contrario, no es cero.

  1. elemento de la lista