分页: 1 / 1

[]和[[]] 区别

发表于 : 2012-02-01 18:09
bellszhu
1.
#!/bin/bash

if [[ ! -d test1 ]]
then
mkdir test1
fi

2.
#!/bin/bash

if [ ! -d test1 ]
then
mkdir test1
fi


今天在网上看到一脚本,里面的if语句后面的判断 用了两个中括号, 不明白为什么?? 因为用一个也可以,所以有疑问。

Re: []和[[]] 区别

发表于 : 2012-02-01 18:30
枫叶饭团
好像遇见过[]报错而必需用[[]]的例子,想不起也不知道 :em06

Re: []和[[]] 区别

发表于 : 2012-02-01 18:37
tusooa
bellszhu 写了:1.
#!/bin/bash

if [[ ! -d test1 ]]
then
mkdir test1
fi

2.
#!/bin/bash

if [ ! -d test1 ]
then
mkdir test1
fi


今天在网上看到一脚本,里面的if语句后面的判断 用了两个中括号, 不明白为什么?? 因为用一个也可以,所以有疑问。
[[是关键字。[是内部命令。差不多。就是用[[方便点。[可移植性高点。
为了避免犯错建议还是用[[

Re: []和[[]] 区别

发表于 : 2012-02-01 18:38
枫叶饭团
tusooa 写了:
bellszhu 写了:1.
今天在网上看到一脚本,里面的if语句后面的判断 用了两个中括号, 不明白为什么?? 因为用一个也可以,所以有疑问。
[[是关键字。[是内部命令。差不多。就是用[[方便点。[可移植性高点。
为了避免犯错建议还是用[[
学习了 :em11 :em11

Re: []和[[]] 区别

发表于 : 2012-02-01 18:42
tusooa
枫叶饭团 写了:好像遇见过[]报错而必需用[[]]的例子,想不起也不知道 :em06
这主要是关于空格和引号的。

Re: []和[[]] 区别

发表于 : 2012-02-01 21:54
josephyoung
-

Re: []和[[]] 区别

发表于 : 2012-02-15 20:46
Think1st
bellszhu 写了:1.
#!/bin/bash

if [[ ! -d test1 ]]
then
mkdir test1
fi

2.
#!/bin/bash

if [ ! -d test1 ]
then
mkdir test1
fi


今天在网上看到一脚本,里面的if语句后面的判断 用了两个中括号, 不明白为什么?? 因为用一个也可以,所以有疑问。

代码: 全选

 
type [
[ is a shell builtin
type [[
[[ is a shell keyword
'[‘是一条命令,'[['是shell内的保留字。
当一个测试条件时候是等价的。

代码: 全选

 7 if [ -z "$VAL" ]
 8 then
 9         echo "The val is null"
10 fi

代码: 全选

  7 if [[-z "$VAL" ]]
 8 then
 9         echo "The val is null"
10 fi
结果一致。

相对于'[]','[[]]'又被称为复合命令,更加符合自然的用法。尤其是在多个测试条件的时候:'[[]]'可以直接用逻辑符号连接。
当两个测试条件时候:

代码: 全选

  if [[ -z "$VAL" && "$VAL" = "" ]]

代码: 全选

  if [ -z "$VAL" -a "$VAL" = "" ]
是等价的。

此外,在使用 = 或 != 操作符时,复合命令 [[ 还能在字符串上进行模式匹配。

代码: 全选

[ian@pinguino ~]$ [[ "abc def .d,x--" == a[abc]*\ ?d* ]]; echo $?
0

代码: 全选

[ian@pinguino ~]$ [ "abc def .d,x--" == a[abc]*\ ?d* ]; echo $?
1
甚至还可以在 [[ 复合命令内执行算术测试,但是千万要小心。除非在 (( 复合命令内,否则 < 和 > 操作符会把操作数当成字符串比较并在当前排序序列中测试它们的顺序。

详见:http://www.ibm.com/developerworks/cn/li ... -test.html

Re: []和[[]] 区别

发表于 : 2012-02-16 10:36
fanhe
所以我很讨厌 shell,支持 python!

Re: []和[[]] 区别

发表于 : 2012-02-16 10:40
eexpress
我可记得[[ 支持正则的。

Re: []和[[]] 区别

发表于 : 2012-02-16 21:15
fanhe
eexpress 写了:我可记得[[ 支持正则的。
别记了,man builtins 吧,要么就上其他脚本
不知道为什么,我越来越讨厌shell 了

Re: []和[[]] 区别

发表于 : 2012-02-17 8:01
Methuselar
别把bash当回事即可。让ksh的纯净思维洗涤你的心灵...

Re: []和[[]] 区别

发表于 : 2012-02-17 9:01
eexpress
fanhe, 你个还在搞bash的,跟我说别记了。 :em04

Re: []和[[]] 区别

发表于 : 2012-02-24 12:50
tosail2010
是也非也,可以运行help [查看一下两者的用法。