[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: shell script question



On Sunday 12 October 2003 6:50 pm, Colin Watson wrote:
>On Sun, Oct 12, 2003 at 06:37:16PM -0400, Jeff Elkins wrote:
>> I'm trying to write a script to change spaces in a filename to the
>> underscore character:
>>
>> #!/bin/sh
>> for i in *; do
>>         if test -f $i; then
>>           mv $i `echo $i | tr '" "' '_'`
>>     fi
>> done
>>
>> When run, it gives me the error "too many args in line four."
>
>If you find yourself writing $variable without double quotes around it
>in shell, you should think twice to make sure that you know exactly what
>expansion rules are going to apply to it. Usually the answer is "more
>than you wanted".
>
>Try this instead (untested):
>
>  #! /bin/sh
>  for i in *; do
>    if test -f "$i"; then
>      mv "$i" "`echo "$i" | tr ' ' _`"
>    fi
>  done
>
>Also consider 'set -e' just below the #! line, in case one of the mv
>commands goes bananas for some reason.

That worked great! - God, I love this list :)

Thanks,

Jeff



Reply to: