web-dev-qa-db-fra.com

bash pour la commande en ligne

Je dois exécuter des commandes, dans un script bash, et dans ce script bash, je dois exécuter d'autres commandes. Je cours CentOS.

J'ai trouvé 2 façons de faire cela sur les blogs et les manuels:

1) en utilisant les tiques ou l'accent char

command `sub command`

ou

2) en utilisant le signe dollar et les parenthèses

command $(sub command)

Quelle est la différence entre le 2 et lequel est préférable d'utiliser?

19
dale

Il n'y a pas de différence sauf en ce qui concerne la "capacité de nidification":

La $() est emboîtable:

$ echo $(echo "hi" $(echo "there"))

alors que le `` n'est pas.

35
holygeek

D'autres ont souligné la différence de syntaxe (en principe, $() est légèrement plus propre pour nidifier et s'échapper), mais personne n'a mentionné ce que je considère comme la différence la plus importante: $() est beaucoup plus facile à lire. Cela ne ressemble pas à des guillemets simples (qui signifient quelque chose de totalement différent), et les délimiteurs d'ouverture et de fermeture sont différents, ce qui facilite la distinction visuelle de son contenu.

Pour vos propres scripts, cela peut ne pas être vraiment critique; la lisibilité du code est bonne, mais la fonctionnalité est plus importante. Mais pour ceux qui écrivent des tutoriels, des exemples de code, des réponses stackoverflow, etc., la lisibilité est beaucoup plus importante. People will saisit des guillemets simples au lieu des guillemets arrières lors de la saisie d’exemples, etc., puis s’embrouille lorsque cela ne fonctionne pas comme prévu.

Donc, pour tous ceux qui écrivent des exemples sur stackoverflow: épargnez les problèmes à vos lecteurs et utilisez toujours le formulaire $().

5
Gordon Davisson

$(...) et les backticks sont très similaires. La seule différence entre les deux est quelques détails sur les caractères spéciaux qui leur sont substitués; le manuel explique mieux que je pourrais:

Lorsque la forme de substitution de style ancien (backquote) est utilisée, la barre oblique inverse conserve sa signification littérale, sauf lorsqu'elle est suivie de $, `ou. Le premier backquote non précédé d'une barre oblique inverse met fin à la substitution de commande. Lorsque vous utilisez le formulaire $ (commande), tous les caractères entre les parenthèses constituent la commande; aucun n'est traité spécialement.

Cela facilite l’imbrication de $(...), par exemple. A part ça, cependant, il n'y a pas de différence.

2
duskwuff

Citant de http://tldp.org/LDP/abs/html/commandsub.html

  1. La forme de substitution de commande $ (...) traite une double barre oblique inverse d'une manière différente de `...`. 
  2. La forme $ (...) de substitution de commande permet l’imbrication

J'espère que cela t'aides!

1
another.anon.coward

Je dois être d'accord avec Gordon sur le fait que $ () est beaucoup plus propre. Je me suis battu pendant 2 heures pour éditer mon fichier .bash_profile afin d’ajouter des informations complètes sur le bash homebrew, mais je me suis rendu compte que j’aurais dû utiliser `et non '. 

0
Grasshopper