Pourquoi 'pour tout texte; fais-tu une boucle quatre fois?

9

Est-ce un bug ou une fonctionnalité?
Cela semble se produire pour les alphanumériques non cités.

Exécuter GNU bash, version 4.1.5

for alpha01234; do echo $((++i)); done

production:

1
2
3
4
Peter.O
la source

Réponses:

14

C'est une caractéristique de la forcommande composée, comme décrit par help for:

for: for NAME [in WORDS ... ] ; do COMMANDS; done

Exécutez des commandes pour chaque membre d'une liste.

La forboucle exécute une séquence de commandes pour chaque membre d'une liste d'éléments. Si in WORDS ...;n'est pas présent, alors in "$@"est supposé. Pour chaque élément de WORDS, NAMEest défini sur cet élément et les COMMANDSsont exécutés.

Ainsi, le code que vous avez cité est probablement exécuté dans un script qui a été appelé avec 4 paramètres.

homme au travail
la source
Merci ... Ce qui m'a complètement bouleversé, c'est que cela s'est produit sur la ligne de commande .. En fait, je ne l'ai pas essayé dans un script .. J'ai dû l'utiliser set a b c drécemment. J'utilise souvent setcette méthode dans un script pour les tests .. Après le redémarrage du terminal, il s'est arrêté ... (c'est logique maintenant) ..
Peter.O
12

for x; do …est un raccourci pour for x in "$@"; do …: il parcourt les paramètres positionnels. S'il boucle quatre fois, cela signifie que vous avez quatre paramètres de position (à $1travers $4).

Gilles 'SO- arrête d'être méchant'
la source