Hi Ein Ausschnitt aus dem Linux-Anwenderhandbuch von lunetix.de: 1 $ for i in *.foo; do 2 >base='basename $i .foo' 3 >mv $i $base.bar 4 >done 5 $_ Die Anweisung soll alle .foo-Dateien nach .bar umbenennen. Das tut es aber nicht. Man muss wohl dafür Zeile 2 in ">base=$(basename $i .foo)" umbenennen - warum? ' ' und $() sollten doch das Gleiche bewirken!! Grüße ChristophR.
Hallo Christoph, On Sonntag, 11. März 2001 17:03 Christoph Raucher wrote:
' ' und $() sollten doch das Gleiche bewirken!!
fast. ` ` (also Backticks!) und $() bewirken in der Bash das gleiche, die ` `-Variante ist allerdings portabel und funktioniert auch z.B. in der CSH, während sich mehrere $() aber problemlos auch verschachteln lassen. Das geht zwar irgendwie auch mit ` `, aber die Übersichtlichkeit leidet dabei mit Sicherheit. Gruß, Stephan -- Stephan Hakuli | mailto: stephan@hakuli.de | * GnuPG/PGP-Key * | callto: 01 71 - 651 89 43 | available, please | surfto: http://www.hakuli.de | visit my homepage *Homepage updated: Short survey on SSH-login with 'authorized_keys'*
Hallo Stephan, * Stephan Hakuli schrieb:
On Sonntag, 11. März 2001 17:03 Christoph Raucher wrote:
' ' und $() sollten doch das Gleiche bewirken!!
fast. ` ` (also Backticks!) und $() bewirken in der Bash das gleiche, die ` `-Variante ist allerdings portabel und funktioniert auch z.B. in der CSH, während sich mehrere $() aber problemlos auch verschachteln lassen. Das geht zwar irgendwie auch mit ` `, aber die Übersichtlichkeit leidet dabei mit Sicherheit.
Gegen die Verwendung der Back Ticks (accent grave, Backquote) spricht übrigens auch ihre schlechte Lesbarkeit/hohe Verwechselungsgefahr mit den Apostrophs (Single Quote, Tick). Wie dieser Thread wieder zeigt. :) christian -- To err is human, to moo bovine.
Hallo, On Son, 11 Mär 2001, Christoph Raucher wrote:
Ein Ausschnitt aus dem Linux-Anwenderhandbuch von lunetix.de:
1 $ for i in *.foo; do 2 >base='basename $i .foo'
Das muessen backticks "`" sein, keine ticks "'".
3 >mv $i $base.bar 4 >done 5 $_
Besser ist sowieso mmv (IIRC): mmv "*.foo" "#1.bar" Oder: for file in *.foo; do mv $file `basename $file .foo` done Mit $() geht das auch und ist IMO auch besser lesbar, besonders wenn verschachtelt wird und/oder '' vorkommen, aber eben bash-spezifisch. Durchnumerieren: i=0; for f in *.foo; do echo mv $f ${f//.foo/$(printf "%0.4i" $i).bar}; i=$[i+1]; done Man kann die Ersetzung auch mit der bash machen kann (was ebenfalls bash-spezifisch ist: mv "$file" "${file//.foo/.bar}" CU David --
Die Probleme dieser Welt begannen, als der erst kam! Der erste was? M-e-n-s-c-h [in detebe]
participants (4)
-
Christian Schult
-
Christoph Raucher
-
David Haller
-
Stephan Hakuli