" []"与" [[]]"在Bash shell中 [英] "[ ]" vs. "[[ ]]" in Bash shell

查看:142
本文介绍了" []"与" [[]]"在Bash shell中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这可能已经回答了,但我要问它反正。我有一个脚本的两个版本( comp.sh ) -

 #!/ bin / sh的
出口tDay = $(日期'+%Y%M%D')
的newfile =$ filename_ tDay
文件名=filename_20120821100002.csv
回声$ $的newfile文件名
如果[$ =文件名* $ newfile中*]
然后
  回声匹配
其他
  回声不匹配!
科幻输出:
$ ./comp.sh
filename_20120821 filename_20120821100002.csv
不匹配!

 #!/ bin / sh的
出口tDay = $(日期'+%Y%M%D')
的newfile =$ filename_ tDay
文件名=filename_20120821100002.csv
回声$ $的newfile文件名
如果[[$ =文件名* $ newfile中*]
然后
  回声匹配
其他
  回声不匹配!
科幻$ comp.sh
filename_20120821 filename_20120821100002.csv
配对

有人能解释我为什么会不同?

此外 - 在什么情况下应该 [] 被用来与 [[]] ,反之亦然<? / p>

解决方案

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

  $ [ABC = BC *];回声$?
1
$ [ABC = * BC]];回声$?
0

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?

解决方案

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

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

这篇关于&QUOT; []&QUOT;与&QUOT; [[]]&QUOT;在Bash shell中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆