Il existe deux syntaxes pour la substitution de commande: avec dollar-parentheses et avec backticks. Courir top -p $(pidof init)
et top -p `pidof init`
donne le même résultat. S'agit-il de deux manières de faire la même chose ou existe-t-il des différences?
shell
command-line
command-substitution
Tshepang
la source
la source
Réponses:
Les citations arrières de style ancien
` `
traitent les barres obliques inverses et les imbrications un peu différentes. Le nouveau style$()
interprète tout ce qui se trouve entre les deux( )
comme une commande.fonctionne si les cotes arrière imbriquées sont échappées:
fun backslash:
Le nouveau style
$()
s'applique à tous les shells conformes à POSIX .Comme le soulignait le mouviciel , l’ancien style
` `
pourrait s’avérer nécessaire pour les coquillages plus anciens.Outre le point de vue technique, le style ancien
` `
présente également un inconvénient visuel:I like $(program) better than `program`
'`'`''`''`'`''`'
(et SE utilise
` `
à ses propres fins, c’était pénible d’écrire cette réponse :)la source
{ }
est généralement appelée « accolades » ou « accolades » en.wikipedia.org/wiki/Braces_(punctuation)#Braces`
est une touche morte, je dois donc taper soit un double backtick (quelque chose que j'oublie généralement que je peux même faire) ou backtick puis de l'espace, qui est un douleur.La différence évidente que j’observe est que vous ne pouvez pas imbriquer des backticks tant que vous le pouvez
$()
. Peut-être que les deux existent pour des raisons d'héritage. De même, les commandes.
etsource
sont des synonymes.la source
source
. Dash est un exemple.$(...)
et`...`
sont standard (le dernier étant déconseillé) alors que.
c'est standard mais passource
(t)csh
ne peuvent-ils pas être imbriqués.(t)csh
ne supporte pas$(...)
si. Ils soutiennentsource
(et pas.
) cependant.$()
ne fonctionne pas avec le vieux shell Bourne. Mais cela fait desannéesque je travaille avec le vieil shell Bourne.la source
Une autre note,
$()
utilisera plus de ressources système que d'utiliser des backticks, mais est légèrement plus rapide.En maîtrisant les scripts de shell Unix , Randal K. Michael avait effectué un test dans un chapitre intitulé "24 manières de traiter un fichier ligne par ligne".
la source
$()
que votre script est plus grand d'un octet que s'il était utilisé`
(en supposant que vous ne les imbriquiez pas et que vous n'utilisiez pas de barres obliques inverses). Quant à savoir ce qui serait le plus rapide à analyser, cela varierait d'une coquille à l'autre et serait sans importance, car négligeable par rapport au coût de la création d'un tuyau et de la mise en œuvre du processus qu'entraîne la substitution.Pour ajouter à ce que d'autres ont dit ici, vous pouvez utiliser les backticks pour simuler des commentaires en ligne:
La sortie est:
foo bar
.Voir les informations suivantes pour plus d'informations: https://stackoverflow.com/a/12797512 (Notez également les commentaires ci-dessous.)
la source
La
$()
syntaxe ne fonctionnera pas avec l’ancien shell Bourne.Avec des shells plus récents
` `
et$()
équivalents, il$()
est beaucoup plus pratique à utiliser lorsque vous devez imbriquer plusieurs commandes.Par exemple :
est plus facile à taper et à déboguer que:
la source