---大家讨论一下这两种写法的区别

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
bzhao
帖子: 254
注册时间: 2008-07-05 2:15
系统: XUbuntu

---大家讨论一下这两种写法的区别

#1

帖子 bzhao » 2013-08-05 15:18

#!/bin/sh

if [[ 3 -gt 2 ]];then
echo aaaaa
fi

if [ 3 -gt 2 ];then
echo aaaaa
fi
Bill Z
stat -c %a filename
\_.\{-}
头像
lxf1992521
帖子: 240
注册时间: 2011-06-26 18:28
联系:

Re: ---大家讨论一下这两种写法的区别

#2

帖子 lxf1992521 » 2013-08-05 21:29

[[ 是bash的新版本特性,比 [ 功能更强大,且兼容 [ 。

比如测试两个命令表达式:

代码: 全选

[ -d /dev && -f /etc/fstab ] && echo hello
# bash: [: 缺少 `]'

[[ -d /dev && -f /etc/fstab ]] && echo hello
# hello
还有很多其他的特性,欢迎查阅《高级Bash脚本编程指南》和bash的man文档! :em11
头像
bzhao
帖子: 254
注册时间: 2008-07-05 2:15
系统: XUbuntu

Re: ---大家讨论一下这两种写法的区别

#3

帖子 bzhao » 2013-08-07 12:26

lxf1992521 写了:[[ 是bash的新版本特性,比 [ 功能更强大,且兼容 [ 。

比如测试两个命令表达式:

代码: 全选

[ -d /dev && -f /etc/fstab ] && echo hello
# bash: [: 缺少 `]'

[[ -d /dev && -f /etc/fstab ]] && echo hello
# hello
还有很多其他的特性,欢迎查阅《高级Bash脚本编程指南》和bash的man文档! :em11

[ -d /dev && -f /etc/fstab ] && echo hello 应该改成:

[ -d /dev -a -f /etc/fstab ] && echo hello

谢谢你让我了解有这个差异(-a, &&)
Bill Z
stat -c %a filename
\_.\{-}
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: ---大家讨论一下这两种写法的区别

#4

帖子 lilydjwg » 2013-08-08 11:54

[[ 是 bash / zsh 的关键字,[ 是一个命令。[[ 里不用关心 globbing 和字符串扩展的问题,比如 [[ -n $a ]] 以及 [[ $t == *test* ]]。
回复