bash, sed arrays und newline

  • Themenstarter Themenstarter sw33tlull4by
  • Beginndatum Beginndatum
S

sw33tlull4by

Guest
Ich fress hier gleich einen Besen.
Ich habe seit laenderer Zeit kein Bash mehr geschrieben.
So, nun wollte ich mal meine *.ogg datein von einem Streamrip konvertieren.
und dafuer wollte ich sie in einen Array einlesen und dann ueber diesen Array iterieren.
Ich komme aber noch nichtmal dazu diesen Array zu erstellen.
ls|sed 's/^ /^\n/g' i=$(ls|sed 's/^ /^\n/g')
ls|sed 's/^ /^\n/g'|set i
ls|sed 's/*.ogg\ /&\n/g'|set i
ls|sed 's/*.ogg\ /&\n/g'
ls|sed 's/*.ogg\ /&\n/g'|set i
ls|sed 's/*.ogg\ /&\n/g'|cat|set i
echo -e $(ls|sed 's/*.ogg\ /&\n/g')|set i
ls|sed 's/*.ogg\ /&\n/g'|set i
echo -e $(ls|sed 's/*.ogg\ /&\n/g')
echo -n $(ls|sed 's/*.ogg\ /&\n/g')
echo -n $(ls|sed 's/*.ogg\ /&href/g')
ls|sed 's/*.ogg\ /&href/g'
ls|sed 's/*.ogg\ /&href/g'|set i
i=$(ls|sed 's/*.ogg\ /&href/g')
i=$(ls|sed 's/*.ogg\ /&\n/g')
set i=$(ls|sed 's/*.ogg\ /&\n/g')
set i=echo -e $(ls|sed 's/*.ogg\ /&\n/g')
set i=echo -e $(ls|sed 's/*.ogg\ /&href/g')
ls|sed 's/*.ogg\ /&href/g'
i=echo -e $(ls|sed 's/*.ogg\ /&href/g')
i=$(ls|sed 's/*.ogg\ /&href/g')
i=$(ls|sed 's/*.ogg\ /&\n /g')
i=echo -e $(ls|sed 's/*.ogg\ /&\n /g')
i=$(echo -e $(ls|sed 's/*.ogg\ /&\n /g'))
i=(ls|sed 's/*.ogg\ /&\n /g')
i=$(ls|sed 's/*.ogg\ /&\n /g')
Das sind unzenisert alle sinnvollen wie sinnlosen Moeglichkeiten welche ich schon durchhabe,
und ich weiss nun einfach nicht weiter.
Ich bin mir sicher es ist etwas total einfaches , warum das nicht funktioniert und alle Elemente in das erste arraysegment abgelegt werden aber ich komme nicht darauf.
Danke schonmal im voraus.
mfg

sw33t
 
Code:
for i in `ls`
do
   ffmpeg $i $i.out.mp3 // hier wird jedem element, das ls ausgibt, mp3 angehängt. die genaue syntax vom ffmpeg musst du aber nachlesen (oder welches programm du auch immer zum konvertieren benutzt)
done
 
das regelt nicht mein problem.
Ich wollte das mit vlc machen, aber egal.
Ich kriege den Array ja nciht hin weil alles in das 1. arrayelemtn wandert
echo ${i[n]}
fuer n>0 ist leer.
 
sorry, ich glaube ich verstehe dich nicht richtig :), aber wieso kannst du es nicht mit der for-schleife machen und so für jedes element die anweisungen, die zwischen "do" und "done" stehen, ausführen? Da bräuchte man gar keinen array
 
Es geht nicht um die forschleife sondern um den Array den die vorschleife ablaufen soll.
Ich habe Probleme den Array zu erstellen.
wenn ich die oben aufgefuerhten moeglichkeiten ausfuehre und dann ein
echo ${i[2]}
2 ist nur ein beispiel,
dann bekommeich eine leere ausgabe.
wenn ich aber anstelle der 2 eine 0 eingebe dann bekomme ich alles ausgegeben, und so soll es ja nicht sein.
 
$i ist gar kein Array (zumindest nicht in meinem Beispiel). `ls` erstellt einen array und die for-schleife ist eigentlich nur eine foreach-schleife. D.h., in $i steht immer nur ein Dateiname.
 
wusste gar nicht das man das auch so machen kann.
das behebt aber nicht mein Problem denn dann wird i immer nur fuer das zeichen bis zum naechsten
" " gesetzt und die dateien sind nach dem motto sende\ -\ interpret\ -\ Lied.ogg
und da sucht sich jedes kovertierungstoll die fingerbluting wenn es versucht die datei "-" zu finden.
deswegen glaube ich brauche ich hier den Array.
mfg

sw33t

//edit
bei mir habe ich das oben schon ausprobiert aber da ich dachte das ich was falsch mache habe ich mich an euch gewandt nun bin ich aber der meinung das bei mir in der bash was ausgeschaltet ist.
 
Habe eine Möglichkeit gefunden!

Code:
OLDIFS=$IFS
IFS=$'\n'

for i in `ls`
do
  echo "$i"
done

IFS=$OLDIFS

Eventuell noch mit ls -b escapen! Sollte aber auch so funktionieren.

Gruß
 
Jep das funktioniert.
Vielen Dank.
ich wuerde nur noch gerne wissen wofuer IFS steht, also das wort.
gespeichert ist darin " \t\n"
mfg

sw33t
 
Original von sw33tlull4by
ich wuerde nur noch gerne wissen wofuer IFS steht, also das wort.

Laut Google steht das Wort für Input Field Separator.

Bei man bash | grep IFS sieht man jedoch, dass es für Internal Field Separator steht. :)

Gruß
 
Zurück
Oben