You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Joachim Ansorg edited this page Nov 12, 2021
·
2 revisions
Brace expansions don't work as operands in [ ]. Use a loop.
Problematic code:
[ "$file"= index.{htm,html,php} ] &&echo"This is the main file"
Correct code:
formainin index.{htm,html,php}
do
[ "$file"="$main" ] &&echo"This is the main file"done
Rationale:
Brace expansions in [ ] will expand to a sequence of words. Operators work on single words.
The problematic code is equivalent to [ "$file" = index.htm index.html index.php ], which is invalid syntax. A typical error message is bash: [: too many arguments or dash: somefile: unexpected operator.
Instead, use a for loop to iterate over values, and apply your condition to each.