Why isn't invoking
./myscript foo* when
var=$1 the same as invoking
I've come across a weird issue in a bash script I'm writing. I am sure there is a simple explanation, but I can't figure it out.
I am trying to pass a command line argument to be assigned as a variable in the script.
I want the script to allow 2 command line arguments as follows:
$ bash my_bash_script.bash args1 args2
In my script, I assigned variables like this:
Args 1 is a string descriptor to add to the output file.
Args 2 is a group of directories: "dir1, dir2, dir3", which I am passing as
When I assign
dir* to ARGS2 in the script it works fine, but when I pass
dir* as the second command line argument, it only includes
dir1 in the wildcard expansion of
I assume this has something to do with how the shell handles wildcards (even when passed as args), but I don't really understand it.
Any help would be appreciated.
Environment / Usage
I have a group of directories:
dir_1_y_map, dir_1_x_map, dir_2_y_map, dir_2_x_map,
... dir_10_y_map, dir_10_x_map...
Inside these directories I am trying to access a file with extension
I want to pass
dir_*_map as the second argument to the script and store it in the variable ARGS2, then use it to search within each of the directories for the
The issue is that passing
dir_*_map from the command line doesn't give the list of directories, but rather just the first item in the list. If I assign the variable
ARGS2=dir_*_map within the script, it works as I intend.
It turns out that passing the second argument in quotes allowed the wildcard expansion to work appropriately for
for i in /$ARGS2/*.status
grep -e "string" $i >> $ARGS1".extension"
Here is an example invocation of the script:
sh ~/path/to/script descriptor "dir_*_map"
I don't fully understand when/why some arguments must be passed in quotes, but I assume it has to do with the wildcard expansion in the for loop.
See Question&Answers more detail:os