tcsh shell script expanding * as files

Hello,

Here is a simple shell script saved in a file called "test":
_____________________________
if [ $# -gt 0 ]
then
        echo "arguments number $#"
        while [ $1 ]
        do
                echo "param $1"
                shift
        done
fi
_____________________________


If I launch it with "test *" and if in the directory there are two files "file1" and "test" here is the result:

__________
arguments number 2
param file1
param test
___________


My question is: why?
What I expected was:

___________
arguments number 1
param *
___________


Another thing strange (in my opinion), is that if I remove the "if" test lines like that:
___________________
echo "arguments number $#"
while [ $1 ]
do
        echo "param $1"
        shift
done
___________________

The result of the execution of the script "test *" is:

___________________
arguments number 2
while: Expression Syntax.
___________________


Do you have an idea?

Thanx
bonduelAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
jlevieConnect With a Mentor Commented:
It is the shell that expands wildcards, not the script por program. So when you feed you script a command line containg a wildcard (*), the shell looks in the current (or specified path) for all files/dirs that match the wildcard and then invokes the script with those arguments.
0
 
bonduelAuthor Commented:
Yes you're right, thank you for you comment.
In fact, it is simple to avoid this by quoting the * like:
test "*"

I found this by doing some tests.

I think it is 200 wasted points, and some of your time.

Thank you again.
0
 
bonduelAuthor Commented:
Ha, and about the while error, I should replace the test:

    while [ $1 ]

with

    while [ "$1" != "" ]

Like this it works.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.