La recommandation moderne consiste à utiliser:
$(...)
au lieu de l'ancien:
`...`
principalement pour la lisibilité et pour éviter la nécessité de s'échapper lors de la nidification.
Quels coques ne prennent pas en charge le $(...)
formulaire, et certains d'entre eux sont-ils encore utilisés aujourd'hui?
shell
command-substitution
portability
joeytwiddle
la source
la source
cmd
) dans les shells * shells ont-ils été dépréciés? et vous trouverez la réponse.sh
qui, dans le bon environnement, prendra en charge$(...)
.Réponses:
Le shell Bourne d'origine, csh ou tcsh ne prennent pas tous en charge
$()
et nécessitent``
une substitution de commande.Le shell Bourne n'est plus utilisé comme shell par défaut (/ bin / sh) sur de nombreux systèmes d'exploitation UNIX. Cependant, ces coquilles sont toujours fournies par les fournisseurs de systèmes d'exploitation car elles sont toujours utilisées pour des raisons historiques.
AIX et HP-UX ont tous deux / bin / sh comme shell compatible POSIX. Le shell Bourne est toujours disponible sur AIX sous le nom de «bsh» (mais déconseillé en 1995 avec AIX 4.1) et HP-UX 11.11 «/ usr / old / bin / sh» (Bourne a été supprimé à partir de 11.23). Je ne sais pas quand le changement a été effectué, mais c'était il y a de nombreuses années.
la source
Solaris 10 et versions antérieures
/bin/sh
ne prennent pas en charge$()
.Il est toujours utilisé aujourd'hui car Solaris 10 est toujours utilisé, Sun ne voulait pas le remplacer par une version conforme standard (jusqu'à et y compris Solaris 10) - et parce que la plupart des gens le considèrent
/bin/sh
comme le shell par défaut et ne savent pas comment pour exécuter de manière portative un script avec un shell conforme POSIX .La motivation de Sun pour ne pas changer
/bin/sh
était d'éviter de casser les scripts shell existants qui reposent sur le comportement non conforme.la source
/bin/sh
...