Utilisation de backticks ou de dollars dans des scripts shell

9

Je suis en train d'écrire un script shell (en utilisant Bash) où j'ai besoin de remplir une variable à partir du résultat renvoyé d'une autre commande.

J'utilise donc une syntaxe comme celle-ci:

VAR=`command 2>/dev/null`

Mais lors de la recherche d'informations sur les shells de script, j'ai souvent constaté que ce qui précède peut être obtenu en utilisant également la syntaxe suivante:

VAR=$(command 2>/dev/null)

Les deux fonctionnent pour moi (j'ai obtenu le résultat escompté dans les deux cas) et je me demande donc si je peux toujours utiliser les deux formulaires de manière interchangeable ou si je dois m'en tenir à un seul formulaire pour être sûr de rester conforme à l'évolution future de coquille ?

Justin
la source
Les liens de belacqua offrent de nombreuses informations sur les différences et l'utilisation. Fermeture car elle n'est pas liée à un problème Ubuntu, mais plutôt à un problème de programmation. J'ai fortement recommandé de suivre les liens mentionnés ci-dessus.
Luis Alvarado

Réponses:

13

Utilisez le dollar. Les backticks sont semi-obsolètes , car ils sont plus compliqués à utiliser (voir le lien), et ils ne présentent aucun avantage, sauf si vous faites du golf de code et que vous devez absolument enregistrer un seul caractère. Ils ne seront probablement pas supprimés des obus populaires de si tôt, donc vous pouvez utiliser l'un ou l'autre pour le moment.

l0b0
la source
3

Restez avec la notation du signe du dollar $()chaque fois que vous le pouvez. Les backticks deviennent lourds / déroutants lorsque vous commencez à avoir besoin de faire des devis imbriqués. Ex:

$ FOO=`echo "foo's"`
$ echo $FOO
foo's

Remplacer les backticks par $()donne la même sortie et est plus facile à lire (moins de citations d'angles variables à discerner):

$ FOO=$(echo "foo's")
$ echo $FOO
foo's

Cela, et chaque guillemet (guillemet simple, guillemet double, backtick) signifie quelque chose de différent dans le shell, donc l'utilisation de $ peut aider à supprimer un niveau de complexité. Et le développeur qui vous suit vous remerciera, car il / elle aura plus de facilité à comprendre ce que vous avez fait.

Aaron
la source
Les backticks ne peuvent même pas être imbriqués fonctionnellement.
Bernhard
@Bernhard Mon exemple montre ce que j'avais en tête avec cette déclaration.
Aaron