J'ai vu ce commentaire à de nombreuses reprises sur Unix et Linux ainsi que sur d'autres sites qui utilisent l'expression "les backticks ont été déconseillés", en ce qui concerne des shells tels que Bash & Zsh.
Cette déclaration est vraie ou fausse?
cd
à accéder à un répertoire pour un exemple de la raison pour laquelle la$(...)
notation est plus facile à utiliser que les guillemets arrières imbriqués.matchingLines=$( grep -n '\$-PARAMETER' ... | ... )
fonctionne,matchingLines= backtick the same stuff backtick
ne fonctionne pas - semble perdre la barre oblique inverse dans la barre oblique inverse. (Ce n'est pas mon script ...)Réponses:
Il existe deux sens différents de "obsolète".
Par cette définition, les backticks sont obsolètes.
Par cette définition, les backticks ne sont pas obsolètes.
Toujours supporté:
En citant la spécification de groupe ouvert sur les langages de commande Shell , plus précisément à la section "2.6.3 Substitution de commandes", il apparaît que les deux formes de substitution de commande, backticks (
`..cmd..`
) ou dollar parens ($(..cmd..)
) sont toujours prises en charge dans la mesure où la spécification est appliquée .extrait
Alors, pourquoi tout le monde dit que les backticks ont été déconseillés?
Parce que la plupart des cas d'utilisation devraient utiliser la forme dollar parens plutôt que les backticks. (Déconseillé dans le premier sens ci-dessus.) La plupart des sites les plus réputés (y compris U & L) affirment souvent cela aussi, tout au long de leur propos, c'est donc un conseil judicieux. Ce conseil ne doit pas être confondu avec un plan inexistant visant à supprimer le soutien des piqûres arrière des coquilles.
BashFAQ # 082 - Pourquoi $ (...) est-il préféré à `...` (backticks)?
extrait
Wiki Bash Hackers - Syntaxe obsolète et obsolète
extrait
Logique standard POSIX
extrait
Remarque: ce troisième extrait (ci-dessus) montre plusieurs situations où les backtick ne fonctionnent tout simplement pas, mais la méthode la plus récente dollar parens fonctionne, en commençant par le paragraphe suivant:
Si vous continuez à lire cette section, les échecs sont mis en surbrillance et montrent comment ils échoueraient en utilisant des backticks, mais ils fonctionnent en utilisant la nouvelle notation dollar parens.
Conclusions
Il est donc préférable que vous utilisiez des dollars parens plutôt que des backticks, mais vous n'utilisez pas quelque chose techniquement "déprécié", car dans "cela cessera de fonctionner complètement à un moment planifié".
Après avoir lu tout cela, vous devriez penser que l’utilisation de dollar parens est vivement recommandée, à moins que vous n’exigiez une compatibilité avec un véritable shell Bourne non POSIX.
la source
$( cmd `cmd`)
est juste un peu moins salissant que$( cmd $(cmd))
- il est plus facile à lire. J'ai toujours toujours considéré une fonctionnalité obsolète dans un logiciel comme une fonctionnalité officiellement désignée comme étant supprimée par l'amont - et je n'ai jamais entendu parler de ce genre de chose. Je m'en fiche, je n'ai aucun amour pour la tombe.Ce n'est pas obsolète, mais backticks (
`...`
) est la syntaxe héritée requise uniquement par le très ancien bourge-shell non compatible$(...)
POSIX et est POSIX et plus préféré pour plusieurs raisons:Les
\
barres obliques inversées ( ) à l'intérieur sont des manipulations non évidentes:La citation imbriquée à l'intérieur
$()
est beaucoup plus pratique:au lieu de:
ou écrire quelque chose comme:
car
$()
utilise un contexte entièrement nouveau pour citerqui n'est pas portable, car les obus Bourne et Korn auraient besoin de ces barres obliques inverses, contrairement à Bash et Dash.
La syntaxe de substitution des commandes est plus simple:
que:
car
$()
applique un contexte entièrement nouveau pour les citations, ainsi chaque substitution de commande est protégée et peut être traitée seule, sans souci particulier pour les citations et les échappements. Lors de l'utilisation de backticks, il devient plus laid et plus laid après deux niveaux et plus.Quelques exemples supplémentaires:
Cela résout un problème de comportement incohérent lors de l'utilisation de citations arrières:
echo '\$x'
les sorties\$x
echo `echo '\$x'`
les sorties$x
echo $(echo '\$x')
les sorties\$x
La syntaxe Backticks a des restrictions historiques sur le contenu de la commande incorporée et ne peut pas gérer certains scripts valides incluant des guillemets, tandis que le nouveau
$()
formulaire peut traiter tout type de script incorporé valide.Par exemple, ces scripts incorporés par ailleurs valides ne fonctionnent pas dans la colonne de gauche, mais fonctionnent dans la colonne IEEE de droite :
Par conséquent, la syntaxe pour la substitution de commande
$
-prefixed devrait être la méthode préférée, car elle est claire visuellement avec une syntaxe propre (améliore la lisibilité pour l'homme et la machine), qu'elle est imbriquée et intuitive, que son analyse interne est distincte et qu'elle est également plus cohérente (avec toutes les autres extensions qui sont analysées à partir de guillemets) où les guillemets sont la seule exception et le caractère est facilement camouflé lorsqu'il est adjacent, ce qui le rend encore plus difficile à lire, en particulier avec des polices de petite taille ou inhabituelles.`
"
Source: Pourquoi est
$(...)
préféré sur`...`
(backticks)? chez BashFAQVoir également:
la source