Die $(...) Syntax funktioniert ausschließlich in der bash. Ich versuche aus Gewohnheit weitgehend kompatibel zu anderen Shells und Unixen zu bleiben. Außerdem haben die () noch eine andere Bedeutung: Sie lassen die eingeschlossenen Befehle in einer Subshell laufen - da ist mir `` lieber. Aber das ist schon wieder fast ein Glaubenskrieg ;-)
Das ist kein Glaubenskrieg, das ist POSIX Standard. Gut, ich bin mit den Eigenheiten der Linux-Shells nicht so vertraut, da ich weit mehr mit HP-UX zu tun habe, wo die $() Notation in allen Shells (sh, ksh, bash) funktioniert. Moeglicherweise werden die anderen Shells unter Linux weniger gepflegt, da ja kaum einer eine andere als die bash benutzt.
Beispiel: jan@k500:~> x=0; ( x=1; echo $x ); echo $x 1 0 jan@k500:~>
Du verwechselst da $() mit (). Beide tun etwas voellig anderes. $() und `` sind auch in Sachen Verwendung von Subshells gleich: $ y=0; x=$(y=2; echo $y); echo $x $y 2 0 $ y=0; x=`y=2; echo $y`; echo $x $y 2 0 $ In beiden Faellen hat das Setzen von y keine Auswirkung.
Übrigens, wenn Du bash-Spezifika nutzt, geht es auch kürzer: "${i//.mp3/.wav}" statt "$(basename "$i" .mp3).wav" Es darf dann nur kein .mp3 vor der Dateiendung auftauchen.
Was dann aber das endgueltige Aus fuer die Portabilitaet bedeutet :-)
P.S.: Bitte nicht an die Liste _und_ an mich antworten. Ich brauche die Mails nicht zweimal.
Sorry, aber man muss ja ein reply to all machen, damit die Listenaddresse nicht verloren geht. Dann kommt es schon mal vor, dass ich vergesse, den Absender rauszunehmen... Mario