GNU/Linux >> Tutoriels Linux >  >> Linux

Syntaxe de déclaration de substitution de commande dans Bash - Laquelle de ces deux est la meilleure pratique ??

Cette question a déjà des réponses ici :Quelle est la différence entre $(stuff) et `stuff` ?

(6 réponses)
Fermé il y a 6 ans.

Cela fait partie d'un bash find boucle, et je me suis demandé quelle est la syntaxe la plus correcte et pourquoi ?

filename="$(echo "$i" | cut -c5-)";
filename=`echo "$i" | cut -c5-`;

Les deux fonctionnent dans le but d'obtenir le nom du fichier.

Réponse acceptée :

Le manuel de Bash note que :

La forme POSIX $() de substitution de commande est implémentée (voir Substitution de commande) et préférée à la forme " du shell Bourne (qui est également implémentée pour la rétrocompatibilité).

Alors $(...) est préféré à `...` dans tout ce que vous écrivez de nouveau et spécifique à Bash¹. La substitution de backtick ne s'imbrique pas bien (vous devez leur échapper) et a un comportement de citation légèrement étrange. Vous pouvez imbriquer $(... $(...) ...) arbitrairement beaucoup sans problème. Le manuel décrit le comportement des deux comme :

Lorsque l'ancienne forme de substitution des guillemets inversés est utilisée, la barre oblique inverse conserve sa signification littérale, sauf lorsqu'elle est suivie de '$', '`' ou ''. La première apostrophe non précédée d'une barre oblique inverse met fin à la substitution de commande. Lors de l'utilisation de la forme $(commande), tous les caractères entre parenthèses constituent la commande ; aucun n'est traité spécialement.

Il est généralement considéré comme une bonne pratique de citer toutes les extensions de chaîne pour éviter les problèmes de division des mots, y compris dans les endroits où cela n'est pas strictement requis, donc "$(...)" est également une meilleure pratique ici.

Enfin, deux parties pertinentes de cette même page wooledge :

  • Il est également temps que vous oubliez `...` . Il n'est pas cohérent avec la syntaxe d'Expansion et est terriblement difficile à imbriquer sans une dose d'analgésiques. Utilisez $(...) à la place.
  • Et pour l'amour du ciel, "Utilisez plus de guillemets !" Protégez vos chaînes et extensions de paramètres contre le fractionnement des mots. La séparation des mots va manger vos bébés si vous ne citez pas les choses correctement.

¹En fait, même en POSIX sh scripts, ceux-ci sont considérés comme les meilleures pratiques. Il y a encore des obus plus faibles, mais vous saurez si vous allez les rencontrer.


Linux
  1. Quel terminal est le meilleur :Bash vs Zsh

  2. Cette syntaxe Shell/bash :Somevariable=somevalue Somecommand?

  3. commande d'exportation bash

  4. Exécutez la commande bash sur le pipeline jenkins

  5. J'ai accidentellement tapé le mot de passe dans la ligne de commande bash

Bash Heredoc

Linux Quelle commande

Commande de source bash

Commande d'historique sous Linux (historique de bash)

Commande Bash printf

Script bash (II)