“[]”与“[[]]”在击壳[重复](“[ ]” vs. “[[ ]]” in Bash shell

2019-07-31 03:07发布

这个问题已经在这里有一个答案:

  • 是双方括号[[]]优选在单一方括号[]中击? 8个回答

这可能已经回答了,但我要问它反正。 我有一个脚本(两个版本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!

#!/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

有人能解释我为什么会有差别?

此外-在什么情况下应[ ]使用与[[ ]]反之亦然?

Answer 1:

test的字符串相等运营商没有做水珠。

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


Answer 2:

[[是内置在bash,并且不能被用#!/bin/sh脚本。 你要读的条件命令在bash手册的部分了解的能力[[ 。 映入脑海的主要好处:

  • ==!=执行模式匹配,所以右手侧可以是glob模式
  • =~!~执行正则表达式匹配。 捕获组存储中BASH_REMATCH阵列。
  • 布尔运算符&&||
  • 无字拆分,所以它不是严格必须引用您的变量。

主要缺点:现在你的脚本是bash的特异性。



Answer 3:

Also - under what circumstances should [ ] be used vs. [[ ]] and vice versa?

这取决于。 如果你关心可移植性,并希望你的shell脚本在各种炮弹的运行,那么你不应该使用[[ 如果您想通过提供的功能[[上一些炮弹,你应该使用[[当你想要这些功能。 就个人而言,我从来没有使用[[因为便携性对我来说很重要。



文章来源: “[ ]” vs. “[[ ]]” in Bash shell [duplicate]