GNU/Linux >> Tutoriels Linux >  >> Linux

Les backticks (c'est-à-dire `cmd`) dans *sh Shells sont-ils obsolètes?

J'ai vu ce commentaire à plusieurs reprises sur Unix et Linux ainsi que sur d'autres sites qui utilisent l'expression "les backticks sont obsolètes", en ce qui concerne les shells tels que Bash et Zsh.

Cette affirmation est-elle vraie ou fausse ?

Réponse acceptée :

Il existe deux significations différentes pour "obsolète".

être obsolète : (principalement d'une fonctionnalité logicielle) être utilisable mais considéré comme obsolète et qu'il vaut mieux éviter, généralement en raison de son remplacement.

—Nouveau dictionnaire américain d'Oxford

Par cette définition, les backticks sont obsolète.

Le statut obsolète peut également indiquer que la fonctionnalité sera supprimée à l'avenir.

—Wikipédia

Selon cette définition, les backticks ne sont pas obsolète.

Toujours pris en charge :

Citant l'Open Group Specification on Shell Command Languages,
en particulier la section « 2.6.3 Command Substitution », on peut voir que les deux formes de substitution de commande, backticks (`..cmd..` ) ou parenthèses dollar ($(..cmd..) ) sont toujours pris en charge dans la mesure où la spécification va.

extrait

La substitution de commande permet de substituer la sortie d'une commande à la place
du nom de la commande elle-même. La substitution de commande doit se produire lorsque la commande
est entourée comme suit :

          $(command)

          or (backquoted version):

          `command`

Le shell doit étendre la substitution de commande en exécutant la commande dans un
environnement de sous-shell (voir Shell Execution Environment) et en remplaçant la
substitution de commande (le texte de la commande plus le $() ou
backquotes) avec la sortie standard de la commande, supprimant les séquences d'un
ou plusieurs caractères à la fin de la substitution. Les caractères incorporés avant la fin de la sortie ne doivent pas être supprimés ; cependant,
ils peuvent être traités comme des délimiteurs de champs et éliminés lors du fractionnement des champs,
en fonction de la valeur de l'IFS et des guillemets en vigueur. Si la sortie
contient des octets nuls, le comportement n'est pas spécifié.

Dans le style de substitution de commande entre guillemets, conservera
son sens littéral, sauf lorsqu'il est suivi de :                                                                                                                                                                                    > notre ces notre ce nos cette nos ces ce ces ces nos nos nos ::ce notre notre notre notre notre notre notre ce ces ` ce ' ce ' , ‘, ou . La recherche
du backquote correspondant doit être satisfaite par le premier backquote non protégé
non échappé ; lors de cette recherche, si un backquote non échappé est
rencontré dans un commentaire shell, un here-document, une commande embarquée
substitution du $(command) form, ou une chaîne entre guillemets, des résultats indéfinis
se produisent. Une chaîne entre guillemets simples ou doubles qui commence, mais ne se termine pas,
dans le "`...` ” la séquence produit des résultats indéfinis.

Avec le $(commande) forme, tous les caractères suivant la parenthèse ouvrante jusqu'à
la parenthèse fermante correspondante constituent la commande. Tout script shell
valide peut être utilisé pour la commande, à l'exception d'un script composé uniquement de
redirections qui produit des résultats non spécifiés.

Alors pourquoi tout le monde dit que les backticks sont obsolètes ?

Parce que la plupart des cas d'utilisation devraient utiliser la forme dollar parens au lieu de backticks. (Obsolète dans le premier sens ci-dessus.) Bon nombre des sites les plus réputés (y compris U&L) l'indiquent souvent également, tout au long, c'est donc un bon conseil. Ce conseil ne doit pas être confondu avec un plan inexistant pour supprimer la prise en charge des backticks des shells.

  • BashFAQ #082 – Pourquoi $(…) est-il préféré à `…` (backticks) ?

    extrait

    `...` est la syntaxe héritée requise uniquement par le plus ancien
    des bourne-shells non compatibles avec POSIX. Il y a plusieurs raisons de toujours
    préférer le $(...) syntaxe :

  • Bash Hackers Wiki – Syntaxe obsolète et obsolète

    extrait

    Il s'agit de l'ancienne forme compatible Bourne de la substitution de commande.
    Les deux `COMMANDS` et $(COMMANDES) les syntaxes sont spécifiées par POSIX,
    mais ce dernier est grandement préféré, bien que le premier soit malheureusement
    toujours très répandu dans les scripts. Les substitutions de commandes de style nouveau sont largement
    implémentées par tous les shells modernes (et plus encore). La seule raison d'utiliser
    les backticks est la compatibilité avec un véritable shell Bourne (comme Heirloom).
    Les substitutions de commandes backtick nécessitent un échappement spécial lorsqu'elles sont imbriquées, et
    les exemples trouvés dans la nature sont mal cités plus souvent qu'autrement. Voir :Pourquoi $(…) est-il préféré à `…` (backticks) ?.

  • Justification de la norme POSIX

    extrait

    En raison de ces comportements incohérents, la variété de substitutions de commandes avec guillemets inversés n'est pas recommandée pour les nouvelles applications qui imbriquent des substitutions de commandes ou tentent d'intégrer des scripts complexes.

REMARQUE : Ce troisième extrait (ci-dessus) montre plusieurs situations où les backticks ne fonctionnent tout simplement pas, mais la nouvelle méthode dollar parens fonctionne, en commençant par le paragraphe suivant :

De plus, la syntaxe entre guillemets a des restrictions historiques sur le contenu de la commande intégrée. Alors que le nouveau formulaire "$()" peut traiter n'importe quel type de script incorporé valide, le formulaire avec guillemets inversés ne peut pas gérer certains scripts valides qui incluent des guillemets inversés.

Si vous continuez à lire cette section, les échecs sont mis en surbrillance, indiquant comment ils échoueraient en utilisant des backticks, mais fonctionnent en utilisant la nouvelle notation dollar parens.

En relation :Comment positionner votre main pour appuyer sur les touches Commande (cmd) + Option (alt) ?

Conclusion

Il est donc préférable d'utiliser des parenthèses en dollars au lieu de backticks, mais vous n'utilisez pas réellement quelque chose qui a été techniquement "obsolète" comme dans "cela cessera de fonctionner complètement à un moment prévu".

Après avoir lu tout cela, vous devriez comprendre que vous êtes fortement encouragé à utiliser des parenthèses en dollars, sauf si vous êtes spécifiquement nécessitent une compatibilité avec un véritable shell Bourne original non POSIX.


Linux
  1. Comment lister tous les fichiers qui ont été installés par un package Apt ?

  2. Quels shells ne prennent pas en charge l'expansion entre parenthèses en dollars et exigent des backticks ?

  3. Comment faire en sorte que la commande Linux ls affiche la seconde dans l'horodatage

  4. Calculer combien d'espace disque aurait été utilisé

  5. Bash a-t-il une commande de couleur, comme on le voit dans MS-Windows CMD ?

Comment savoir depuis combien de temps un processus s'exécute sous Linux

Terminaux, shells, consoles et lignes de commande

3 commandes Linux que vous avez oubliées

La commande "java" n'exécute pas la JVM qui a été installée

Trouver les fichiers qui ont été modifiés au cours des dernières 24 heures

Une commande Linux peut-elle avoir une ou plusieurs majuscules ?