space char shell script problem

Thomas Dickey dickey at radix.net
Sat Aug 23 14:27:10 UTC 2008


On Sat, Aug 23, 2008 at 04:09:57PM +0200, Polytropon wrote:
> On Sat, 23 Aug 2008 06:19:42 -0400, David Banning <david+dated+1219918782.39167f at skytracker.ca> wrote:
> > I am running into a problem with the space character in filenames.
> > For instance, If I want to run the script;
> > 
> > for x in `ls`
> > do
> >   echo $x
> > done
> > 
> > then filenames that have a space in them ie: "john smith.jpg"
> > are processed by my script as two names, "john" and "smith.jpg".
> > 
> > What is the best way to deal with this type of space problem in the shell?
> 
> The best way is not to use spaces in filenames; underscores perform
> their purpose very well without making things more complicated. :-)

spaces won't go away, and since they're legal in filenames, one may as
well handle them.
 
> To iterate over files, I would not use `ls`, instead, I would let
> the shell do the expansion of * for me, as it has already been
> suggested.
> 
> Because the file names x iterates contain spaces, be very (!) careful
> to assure that the applications you call with these filenames get
> the spaces correctly masked, either put the filename in quotes or
> substituts " " by "\ ". You would have won nothing when the application
> you call with the filename interpretes it as an argument list with
> two elements.

A script like

	#!/bin/sh
	for x in "$@"
	do
		echo $x
	done

handles quoting nicely enough (for spaces, anyway).  ls will translate
some non-printing characters to printable; the 'find' program is a better
alternative if one must derive the list inside the program.
 
> for x in *; do
> 	echo "${x}"
> done
> 
> Replace the middle line with any program call you want.
> 
> 
> -- 
> Polytropon
> >From Magdeburg, Germany
> Happy FreeBSD user since 4.0
> Andra moi ennepe, Mousa, ...
> _______________________________________________
> freebsd-questions at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe at freebsd.org"

-- 
Thomas E. Dickey
http://invisible-island.net
ftp://invisible-island.net


More information about the freebsd-questions mailing list