In <[🔎] 3f8297b21001041230y69f14fe2m653f899feb45cbdd@mail.gmail.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. ,= ,-_-. =.
bss@iguanasuicide.net ((_/)o o(\_))
ICQ: 514984 YM/AIM: DaTwinkDaddy `-'(. .)`-'
http://iguanasuicide.net/ \_/
Attachment:
signature.asc
Description: This is a digitally signed message part.