Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1189 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1136629
bichtoubar​d
Posté le 20-05-2009 à 16:04:59  profilanswer
 

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 ?

mood
Publicité
Posté le 20-05-2009 à 16:04:59  profilanswer
 

n°1136642
Fork Bomb
Obsédé textuel
Posté le 20-05-2009 à 17:03:42  profilanswer
 

A priori, aucunes  [:airforceone]


---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
n°1136646
bichtoubar​d
Posté le 20-05-2009 à 17:12:34  profilanswer
 

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"

n°1136648
neriki
oenologue
Posté le 20-05-2009 à 17:26:37  profilanswer
 

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...

n°1136651
bichtoubar​d
Posté le 20-05-2009 à 17:51:48  profilanswer
 

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 :)

n°1136655
neriki
oenologue
Posté le 20-05-2009 à 18:08:05  profilanswer
 

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

n°1136678
Taz
bisounours-codeur
Posté le 20-05-2009 à 19:57:05  profilanswer
 

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

n°1136816
[Albator]
MDK un jour, MDK toujours !
Posté le 21-05-2009 à 16:16:00  profilanswer
 

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.


n°1137155
T3K
Berserk Overkill Certified
Posté le 23-05-2009 à 01:26:55  profilanswer
 

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

n°1137163
neriki
oenologue
Posté le 23-05-2009 à 08:17:59  profilanswer
 

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


---------------
C'est pas bon, Neriki, tu recommences à glander, là. :o
mood
Publicité
Posté le 23-05-2009 à 08:17:59  profilanswer
 

n°1137555
bichtoubar​d
Posté le 25-05-2009 à 11:04:08  profilanswer
 

[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.

n°1138580
sputnick
bip...bip...bip...bip...bi...b
Posté le 28-05-2009 à 02:37:39  profilanswer
 

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 )  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

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

 

Sujets relatifs
Apache, execution de commandes & sécuritéProblème d'exécution du Javascript sur certains sites
[résolu]Script automatisation FTP + execution binaireexecution de grep dans un bash
Afficher le résultat de 2 commandes sur 2 colonnespermission en execution ntfs-3g
[Cygwin] Pb d'execution en ligne de commande.Exécution sed sur gros fichier
execution des commandes unixOrdre d'execution des commandes dans un script
Plus de sujets relatifs à : Execution de commandes : `cmd` vs $(cmd)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR