Command line parameter problem in scripts ?

Steven W. Orr steveo at syslang.net
Tue Oct 10 17:44:16 UTC 2006


On Tuesday, Oct 10th 2006 at 18:20 +0100, quoth Paul Howarth:

=>Kim Lux wrote:
=>> I am writing a script to process some files.
=>> 
=>> Lets say the name of the script is myscript.  I want to use it like
=>> 'myscript file1' sometimes and 'myscript *" other times, to process all
=>> the files in the directory with one command.
=>> 
=>> So in myscript, I have this:
=>> 
=>> =======================================
=>> echo
=>> echo Argument 1 is $1.
=>> 
=>> for eachFile in `ls $1`
=>> 	do
=>> 	...
=>> 	done
=>> =======================================
=>> 
=>> The problem is that when I call myscript with 'myscript *", argument 1
=>> ($1) is file1, not * as I expect it to be.  Thus the script processes
=>> the first file and then stops. (file1 is the first file in the
=>> directory.) 
=>> How do I get $1 to be * rather than just a specific file ?  
=>
=>You can't. The shell that you are running is what is expanding the "*", not
=>the script.
=>
=>Try changing the script not to use $1 instead:
=>
=>=======================================
=>echo
=>echo Arguments are "$@"
=>
=>for eachFile in "$@"
=>do
=>	...
=>done
=>=======================================
=>
=>Paul.

That could be a loss of functionality for what kim might have intended. If 
the intent was to specify that the globbing needs to happen in the script 
then 

for eachFile in $1
do
     ...
done

would do it but the invocation would require single quotes. 




More information about the users mailing list