"[ ]" vs. "[[ ]]" in Bash shell

bash, if-statement, scripting, shell, string

Solution

`test`'s string equality operator doesn't do globs.

$ [ abc = *bc ] ; echo $?
1
$ [[ abc = *bc ]] ; echo $?
0

Problem

This may be answered already but I am going to ask it anyways. I have two versions of a script (`comp.sh`)- ``` #!/bin/sh export tDay=$(date '+%Y%m%d') newfile="filename_$tDay" filename="filename_20120821100002.csv" echo $newfile $filename if [ $filename = *$newfile* ] then echo "Matched" else echo "Not Matched!" fi Output: $ ./comp.sh filename_20120821 filename_20120821100002.csv Not Matched! ``` And ``` #!/bin/sh export tDay=$(date '+%Y%m%d') newfile="filename_$tDay" filename="filename_20120821100002.csv" echo $newfile $filename if [[ $filename = *$newfile* ]] then echo "Matched" else echo "Not Matched!" fi $ comp.sh filename_20120821 filename_20120821100002.csv Matched ``` Could someone explain me Why the difference? Also - under what circumstances should `[ ]` be used vs. `[[ ]]` and vice versa?

Original source

Related problems