Execution de commandes : `cmd` vs $(cmd)

Execution de commandes : `cmd` vs $(cmd) - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 20-05-2009 à 16:04:59    

Bonjour,
 
J'ai une question qui paraitra peut-être triviale, mais je me suis rendu compte qu'il existait une alternative aux quotes `` pour exécuter une commande dans une autre, c'est $( ).
 
Par exemple cat `ls` revient à cat $(ls)
 
Connaissez vous la différence entre ces deux possibilités ?

Reply

Marsh Posté le 20-05-2009 à 16:04:59   

Reply

Marsh Posté le 20-05-2009 à 17:03:42    

A priori, aucunes  [:airforceone]


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
Reply

Marsh Posté le 20-05-2009 à 17:12:34    

J'en connais au moins une, $(cmd) ne fonctionne pas sous shell alors que `cmd` fonctionne.
 
Je suis sûr qu'il y a une petite subtilité qui fait que $( ) est apparu dans les shells plus "évolués"

Reply

Marsh Posté le 20-05-2009 à 17:26:37    

Excellente question... [:dawa]
On peut imbriquer les $(), mais pas les ``  
`` fonctionne sous csh (et tcsh) mais pas $()  
Sinon, je me demande si j'ai pas déjà posé la question dans blabla...

Reply

Marsh Posté le 20-05-2009 à 17:51:48    

On peut imbriquer les ` !
 
Essaye : echo `echo \`echo blabla\``, retourne bien "blabla" et non "echo blabla" !
 
$() fonctionne sous ksh et bash uniquement alors ?
 
Pourquoi l'avoir introduit dans ces shells ?? Il y a forcément une explication rationnelle :)

Reply

Marsh Posté le 20-05-2009 à 18:08:05    

Je dirais alors que les $() sont alors plus facilement imbriquable que les `` [:dawa]

Reply

Marsh Posté le 20-05-2009 à 19:57:05    

En effet, sur pas mal de "vieux" shells par défaut, (genre Sol8/9), t'auras pas accès à $(), donc t'es obligé de passer par ``, moins lisible.
 
Et faut oublier la possiblité de faire un commande | while read A B C; do ... done

Reply

Marsh Posté le 21-05-2009 à 16:16:00    

Extrait de man bash:
 

Citation :

Command Substitution
       Command substitution allows the output of a command to replace the command name.  There are
       two forms:
 
              $(command)
       or
              ‘command‘
 
       Bash performs the expansion by executing command and  replacing  the  command  substitution
       with the standard output of the command, with any trailing newlines deleted.  Embedded new‐
       lines are not deleted, but they may be removed during word splitting.  The command  substi‐
       tution $(cat file) can be replaced by the equivalent but faster $(< file).
 
       When  the  old-style  backquote form of substitution is used, backslash retains its literal
       meaning except when followed by $, ‘, or \.  The first backquote not preceded  by  a  back‐
       slash  terminates the command substitution.  When using the $(command) form, all characters
       between the parentheses make up the command; none are treated specially.

       Command substitutions may be nested.  To nest when using the backquoted  form,  escape  the
       inner backquotes with backslashes.
 
       If the substitution appears within double quotes, word splitting and pathname expansion are
       not performed on the results.


Reply

Marsh Posté le 23-05-2009 à 01:26:55    

visiblement $() c'est typiquement un truc implémenté dans bash, et pas dans les autres shell
 
Il est quand même très comique bash côté syntaxe

Reply

Marsh Posté le 23-05-2009 à 08:17:59    

$() fonctionne aussi sous ksh et zsh. :o


---------------
C'est pas bon, Neriki, tu recommences à glander, là. :o
Reply

Marsh Posté le 23-05-2009 à 08:17:59   

Reply

Marsh Posté le 25-05-2009 à 11:04:08    

[Albator] a écrit :

Extrait de man bash:
 


 
Si je ne m'abuse cela ne donne pas le pourquoi de l'implémentation de $(), cela explique juste quelques différences entre les deux.
 
Dans la pratique, les 2 syntaxes peuvent donner le même résultat, même si il est vrai que $() semble plus simple au niveau lecture et concaténation.
Je penche donc pour cette explication, même si pour mes scripts qui sont susceptibles d'êtres lancés aussi bien en shell qu'en ksh bash ... je vais devoir opter pour les bonnes vieilles "backquotes".
 
Merci pour vos avis.

Reply

Marsh Posté le 28-05-2009 à 02:37:39    

Perso, j'utilise tout le temps $( ) car les ` ` sont considérés comme dépréciés.
Les seul cas ou je les utilise encore c'est quand j'en imbrique plusieurs, c'est plus lisible comme ça :
 

Code :
  1. echo "Ton ip est $(echo `links -dump http://sputnick-area.net/ip`)"


 
( pour les curieux ou les sceptiques, le "$(echo `...`)" permet de retirer les espaces et indentations inutiles un peu come le ferais xarg )  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed