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