Date: Thu, 31 Jul 2003 21:27:05 -0500 From: Dan Nelson <dnelson@allantgroup.com> To: Chuck Swiger <cswiger@mac.com> Cc: Rob Lahaye <lahaye@users.sourceforge.net> Subject: Re: tcsh script: quote and spaces problems Message-ID: <20030801022705.GC13080@dan.emsphone.com> In-Reply-To: <3F29CD39.9080505@mac.com> References: <3F29C589.4030009@users.sourceforge.net> <3F29CD39.9080505@mac.com>
next in thread | previous in thread | raw e-mail | index | archive | help
In the last episode (Jul 31), Chuck Swiger said: > Rob Lahaye wrote: > [ ... ] > >Any solutions for this problem with quotes and spaces in tcsh > >script? Or is tcsh not suitable for this kind of things? > > Ugh, the latter. :-) /bin/sh handles nested quoting right, but crunches > the space together: > > % foo="-f \"t \"" > % echo $foo > -f "t " > > % foo='-f "t "' > % echo $foo > -f "t " Actually it doesn't. You get this result because sh splits variables on $IFS before passing the result to a command, so what echo gets is argv[1]="-f \"t" argv[2]="\"" , and echo always prints its arguments separated by a space. You can verify that the variable is set correctly by running "set | grep -a foo". To pass the entire string as one argument, run echo "$foo". > ...however, you might be able to muck with $IFS and get better results. > Also, ZSH seems to do exactly what you expected: > > 64-sec% foo="-f \"t \"" > 65-sec% echo $foo > -f "t " This is because zsh passes variables directly to commands, unless the SH_WORD_SPLIT flag is set. You can force spltting with the ${=foo} syntax. -- Dan Nelson dnelson@allantgroup.com
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030801022705.GC13080>