In <email@example.com>, Foss User wrote: >$ ls >convert.sh Track 1.wav Track 3.wav Track 5.wav Track 7.wav Track 9.wav >Track 1.mp3 Track 2.wav Track 4.wav Track 6.wav Track 8.wav > >So, you can see there are file names with spaces in them. I have >written a script like this to handle one file name at a time. > >for file in `ls *.wav` >do > echo $file >done > >Of course, this doesn't do what I need. The names are split wherever >there are spaces. That's because you are using a useless subshell for a useless ls, and failing to quote your variables. You need: for f in *.wav; do echo "$file" done ls is not responsible for doing filename expansion ("globbing"); the shell is, so let the shell do it. Since you aren't using a subshell, word-splitting is not done on its output. The quotes are required to prevent the shell from performing word-splitting on the contents of the variable; i.e. to prevent the filename "Track 2.wav" to be sent to the echo command/built-in as two arguments: "Track" and "2.wav". You wouldn't notice a difference in this case unless your filenames contained tabs, newlines, or consecutive whitespace characters. -- Boyd Stephen Smith Jr. ,= ,-_-. =. firstname.lastname@example.org ((_/)o o(\_)) ICQ: 514984 YM/AIM: DaTwinkDaddy `-'(. .)`-' http://iguanasuicide.net/ \_/
Description: This is a digitally signed message part.