Je crois comprendre que la $(...)
syntaxe de substitution de commandes plus moderne est préférée à la `
syntaxe basée sur l'ancienne , en raison d'une syntaxe d'imbrication et d'échappement plus facile et moins sujette aux erreurs.
De plus, il semble que la plupart /bin/sh
des shells de style moderne prennent en charge $(…)
:
- frapper
- ash (et donc BusyBox, donc la plupart des Linux embarqués)
- tiret
- FreeBSD / bin / sh
Et $(…)
est spécifié par IEEE 1003.1.
J'ai donc 2 questions très liées:
- Y a-t-il une raison d'utiliser `dans le nouveau développement de scripts shell à moins que vous ne connaissiez un ancien système spécifique sur lequel le script devra fonctionner?
- Y a-t-il une raison de ne pas enseigner aux étudiants en programmation UNIX juste à écrire
$(...)
et à discuter`
uniquement en tant que variante obsolète qu'ils rencontreront probablement s'ils lisent les scripts shell d'autres développeurs (et peuvent avoir besoin s'ils travaillent avec un système très ancien ou non standard) pour certaines raisons)?
shell
command-substitution
Michael Ekstrand
la source
la source
`...`
. Il est là pour la portabilité vers l'arrière avec le shell Bourne uniquement (comme le shell Bourne avait^
(la même chose que|
) pour la portabilité vers l'arrière avec le shell Thomson). Notez cependant que(t)csh
ce n'est pas le cas$(...)
(mais cela ne sert à rien de les utiliser ou de les enseigner non plus).$()
- Maj + 4,9, Maj + 0 - 5 pressions de touche;Réponses:
Étant donné que les ticks arrière sont souvent utilisés, il est logique d'enseigner cette construction syntaxique.
Bien sûr, la
$()
substitution de commande de style doit être soulignée comme style par défaut (et construction conforme standard).Pourquoi les back-ticks sont-ils toujours aussi populaires? Parce qu'ils économisent un caractère en tapant, et ils sont sans doute moins lourds à l'œil.
la source
$()
meilleur mais les contre-coups sont plus faciles et plus KISS; pourrait être une conséquence OCDish pavlovienne de la programmation générale.`
est Altrg + è, (maladroit type), alors que$
,(
,)
ne nécessitent pas de modification.Je ne les utiliserais pas pour la programmation, et l'enseignement de l'utilisation de la substitution de backtick dans les scripts shell est obsolète (cela semble être le consensus). Je ne pense pas qu'ils soient intrinsèquement mauvais, cependant, et (au moins à en juger par votre didacticiel moyen sur la ligne de commande Linux), ils sont encore fréquemment utilisés dans de simples extraits / lignes simples où ils ne seront probablement pas imbriqués et les choses que vous ne vais faire qu'une seule fois.
Voir Substitution de commandes: backticks ou signe dollar / paren inclus? .
la source
J'évite d'utiliser la
$()
construction car elle n'est pas portable - dans le monde réel. Vous avez répertorié quatre obus - il y a beaucoup plus de variations que cela autour (un ordre de grandeur?). Essayez d'exécuter votre script dans Solaris / bin / sh et voyez comment vous allez.D'un autre côté, quand arrêtez-vous de prendre en charge les anciens systèmes? ne pouvez-vous jamais progresser vers de nouvelles façons de faire? Je pense que vous devriez faire confiance à votre propre jugement, et si vous pouvez voir un avantage certain de la nouvelle façon sur l'ancienne, alors allez-y ... ce n'est pas l'un d'eux (personnellement, je trouve les bacticks beaucoup plus clairs - ils ne peuvent pas être confondu avec la substitution de variable shell, ce qui est différent)
la source
/bin/sh
doit être conforme. Le Solaris/bin/sh
est en effet très non conforme - bien que Solaris 9/10 / ... soit officiellement compatible POSIX. C'est$()
juste une construction qu'il ne comprend pas. Mais il y en a beaucoup d'autres qu'il ne comprend pas ou qui sont interprétés différemment. La manière portable d'obtenir une conformitésh
pour la rechercher dans le chemin renvoyé pargetconf PATH
.