On Tue, Feb 26, 2008 at 05:30:12PM -0500, Jacques B. wrote:
If I understand you correctly, you are referring to the problem caused by spaces in filenames? Steve mentioned the environment variable IFS ("individual field separator" if memory serves me correctly). By default it's space, tab, or newline. You can change that in your script to be newline only in order to process file names with spaces in it, and then change it back afterwards (so save the value of $IFS at the beginning of the script to something like Default_IFS and then just prior to exiting the script reassign that value back to IFS to return it to its original state). If that's what you are looking at
You don't need to do any of that in a script, because scripts are run as a sub-process and don't impact the current environment. You only need to save/restore IFS if you're doing this as part of a larger script (or as a function called in the current shell).
However, spaces AREN'T an issue with proper quoting.
$ touch "a file with spaces in" $ touch "another file" $ ls a file with spaces in another file $ for a in *
do echo "File: $a" done
File: a file with spaces in File: another file
Indeed, carriage returns aren't an issue either!
$ a=$(echo "a\nb") $ touch "$a" $ touch c $ ls a?b c [ Note the ? in the ls output; that's "ls" saying there's a funny character! ] $ for a in *
do echo "File: $a" done
File: a b File: c
All works nicely.
You only need to use find if you're doing things deep down in a directory tree.