Quels coquilles ne prennent pas en charge l'expansion entre parenthèses en dollars et exigent des mesures de rétorsion?

8

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?

joeytwiddle
la source
1
Lire à travers Les backticks (c'est-à-dire cmd) dans les shells * shells ont-ils été dépréciés? et vous trouverez la réponse.
John1024
Il dit: "La seule raison d'utiliser des backticks est la compatibilité avec un vrai shell Bourne (comme Heirloom)."
joeytwiddle le
1
Un point important est que tous les systèmes de type Unix maintenus après les années 90 auront une commande appelée shqui, dans le bon environnement, prendra en charge $(...).
Stéphane Chazelas

Réponses:

8

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.

Cœur sombre
la source
5

Solaris 10 et versions antérieures /bin/shne 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/shcomme 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.

maxschlepzig
la source
2
@cuonglm, oui, je viens de le tester et je peux le confirmer. J'aurais pensé que Hurd allait plutôt sortir que Sun / Oracle change sa politique sur /bin/sh...
maxschlepzig