web-dev-qa-db-fra.com

Shell shift procedure - Qu'est-ce que c'est?

Dans Shell, nous avons le poste de commandement, mais j’ai vu un exemple qui donne le poste 3

Pourquoi il y a un numéro après le quart? et de quoi s'agit-il? ce qu'il fait ?

Exemple: 

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 sortie sera:

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

Mais quand j'ajoute cela, il ne l'affiche pas correctement.

19
user1253622

Jetez un coup d’œil à la page man , qui dit:

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

Un exemple de script:

#!/bin/bash
echo "Input: $@"
shift 3
echo "After shift: $@"

Exécuter:

$ myscript.sh one two three four five six

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

Cela montre qu'après décalage de 3, $1=four, $2=five et $3=six.

45
dogbane

vous utilisez man bash pour trouver la commande intégrée shift:

décalage [n]

Les paramètres de position de n + 1 ... sont renommés en $ 1 .... Les paramètres représentés par les nombres $ # jusqu'à $ # - n + 1 sont non réglé. n doit être un nombre non négatif inférieur ou égal à $ #. Si n est 0, aucun paramètre n'est modifié. Si n n'est pas donné, il est supposé être 1. Si n est supérieur à $ #, le positional les paramètres ne sont pas modifiés. Le statut de retour est supérieur à zéro si n est supérieur à $ # ou inférieur à zéro; sinon 0.

2
Zava

On y répondra simplement en lisant soit le Bash manual , soit en tapant man shift:

      shift [n]

Décalez les paramètres de position vers la gauche de n. Le positionnel les paramètres de n + 1 ... $ # sont renommés en $ 1 ... $ # - n. Paramètres représentés par les nombres $ # à $ # - n + 1 ne sont pas définis. n doit être un nombre non négatif inférieur ou égal à $ #. Si n est zéro ou supérieur que $ #, les paramètres de position ne sont pas modifiés. Si n n'est pas fourni, il est supposé être 1. L'état de retour est zéro sauf si n est supérieur à $ # ou inférieur à zéro, différent de zéro sinon.

1

Décalez les paramètres de position vers la gauche de n. Les paramètres de position de n + 1 ... $ # sont renommés en $ 1 ... $ # - n. Les paramètres représentés par les nombres $ # à $ # - n + 1 ne sont pas définis. n doit être un nombre non négatif inférieur ou égal à $ #. Si n est égal à zéro ou supérieur à $ #, les paramètres de position ne sont pas modifiés. Si n n'est pas fourni, il est supposé être 1. L'état de retour est zéro sauf si n est supérieur à $ # ou inférieur à zéro, différent de zéro sinon.

  1. Élément de liste
0
kalyan varma

shift traite les arguments de ligne de commande comme une file d'attente FIFO. L'élément popleft à chaque fois qu'il est appelé.

array = [a, b, c]
shift equivalent to
array.popleft
[b, c]
$1, $2,$3 can be interpreted as index of the array.

bash - L'avantage du décalage par rapport à la réaffectation de la valeur simple - Stack Overflow

0
JawSaw