11-04-2008
121,
0
Join Date: Aug 2008
Last Activity: 12 December 2011, 2:18 PM EST
Posts: 121
Thanks Given: 0
Thanked 0 Times in 0 Posts
shopt -s nullglob
Hi,
I am using BASH. In a directory there are files that match either of the following 2 patterns: [AST]*.L1A_[GL]AC* or S*.L1A_MLAC*
I would like to write a script that will include a for loop, where for each file in the directory, a certain function will be performed. For example:
for FILE in [AST]*.L1A_[GL]AC* S*.L1A_MLAC*; do
echo $FILE
done
The content of the directory will be random, and there are 3 potential scenarios: 1) Files of both patterns exist in the directory, 2) Only files of the 1st pattern exist, 3) Only files of the 2nd pattern exist. The last two scenarios are problematic as one of the patterns won't be matched, resulting in my script behaving oddly.
- I believe the way around this is to use the shopt -s nullglob option. Does anyone have any other ideas?
- MAIN QUESTION: Where in the code should I put the shopt -s nullglob and shopt -u nullglob? Of course the shopt -s nullglob should be set immediately before the the beginning of the for loop. But, can the shopt -u nullglob be immediately after the beginning of the for loop (ie):
shopt -s nullglob
for FILE in [AST]*.L1A_[GL]AC* S*.L1A_MLAC*; do
shopt -u nullglob
echo $FILE
done
OR after the conclusion of the for loop (ie):
shopt -s nullglob
for FILE in [AST]*.L1A_[GL]AC* S*.L1A_MLAC*; do
echo $FILE
done
shopt -u nullglob
The reason I ask is because I will of course have more complicated code within the for loop, and only want the shopt nullglob command to affect the pattern matching when calling the for loop.
Thanks for your help.
Mike