GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi définir une variable avant une commande est-il légal dans Bash ?

Je viens de rencontrer plusieurs réponses telles que l'analyse d'un fichier texte délimité… qui utilisent la construction :

while IFS=, read xx yy zz;do
    echo $xx $yy $zz
done < input_file

où le IFS la variable est définie avant le read commande.

J'ai lu la référence bash mais je n'arrive pas à comprendre pourquoi c'est légal.

J'ai essayé

$ x="once upon" y="a time" echo $x $y

à partir de l'invite de commande bash mais rien n'a été renvoyé. Quelqu'un peut-il m'indiquer où cette syntaxe est définie dans la référence qui permet de définir la variable IFS de cette manière ? Est-ce un cas particulier ou puis-je faire quelque chose de similaire avec d'autres variables ?

Réponse acceptée :

Des informations pertinentes peuvent être trouvées sur la page de manuel fournie par le responsable de BASH (dernière vérification en août 2020). Section Grammaire du shell, États des commandes simples (soulignement ajouté) :

Une commande simple est une séquence d'affectations de variables facultatives suivi de mots et redirections séparés par des blancs , et terminée par un opérateur de contrôle. Le premier mot spécifie la commande à exécuter et est passé en argument zéro. Les mots restants sont passés en arguments à la commande invoquée.

Vous pouvez donc passer n'importe quelle variable que vous souhaitez. Votre echo example ne fonctionne pas car les variables sont transmises à la commande, et non définies dans le shell. Le shell développe $x et $y avant invoquant la commande. Cela fonctionne, par exemple :

$ x="once upon" y="a time" bash -c 'echo $x $y'
once upon a time

Linux
  1. Alias ​​avec variable dans bash

  2. commande d'exportation bash

  3. La redirection de la sortie de la commande vers une variable dans bash échoue

  4. Code de sortie de l'affectation de variable à la substitution de commande dans Bash

  5. Rediriger la sortie de la commande time sous unix vers une variable bash ?

Bash Heredoc

Commande de source bash

Commande d'historique sous Linux (historique de bash)

Commande Bash printf

Script bash (II)

Bash Beginner Series #2 :Comprendre les variables dans les scripts shell Bash