当前位置: 技术问答>linux和unix
新手问题:关于测试表达式
来源: 互联网 发布时间:2017-05-29
本文导语: x=1 if (( x == 1 )); then echo 'yes';echo 'haha';fi yes haha if [[ $x == 1 ]]; then echo 'yes';echo 'haha';fi yes haha if [[ x == 1 ]]; then echo 'yes';echo 'haha';fi (( x == 1 )) 和[[ $x == 1 ]]都正常执行了,可是最后的[[ x == 1 ]]没有期...
x=1
if (( x == 1 )); then echo 'yes';echo 'haha';fi
yes
haha
if [[ $x == 1 ]]; then echo 'yes';echo 'haha';fi
yes
haha
if [[ x == 1 ]]; then echo 'yes';echo 'haha';fi
(( x == 1 )) 和[[ $x == 1 ]]都正常执行了,可是最后的[[ x == 1 ]]没有期望的结果
想问一下,在用[[ ]]进行条件测试时,必须为变量提供$字符?
$在哪里使用,哪里可以不用,有什么规律吗?
|
Shell定义变量的时候不需要加$,而使用变量的时候则需要加$,这点和perl是有区别的,perl定义变量的时候也需要$符号,访问一个变量的时候只要在其前面加一个$即可,比如echo $name,如果不加$,则显示变量的名字,也就是echo name将显示name。
至于你说的 “[[ x == 1 ]]没有期望的结果” ,是因为()和[ ]的作用上有点不一样,在方括号中,== 和 = 的功能相似,你在使用的时候 = 号两边都有空格,shell将把它看做是赋值语句,显然赋值成功将返回0,所以最后一句是if[ 0 ]的判断是没有后续输出的。
至于if(x == 1)这是c语言的用法了,用c角度来理解就能懂了,按照shell的语法是用if [ pattern ] 来判断的
因此可能你把c中的()用成了shell中的[ ] ,把shell中的 = 用成了c中的 == ,所以自己都混乱了,编程还是按特定语言的语法来吧!
至于你说的 “[[ x == 1 ]]没有期望的结果” ,是因为()和[ ]的作用上有点不一样,在方括号中,== 和 = 的功能相似,你在使用的时候 = 号两边都有空格,shell将把它看做是赋值语句,显然赋值成功将返回0,所以最后一句是if[ 0 ]的判断是没有后续输出的。
至于if(x == 1)这是c语言的用法了,用c角度来理解就能懂了,按照shell的语法是用if [ pattern ] 来判断的
因此可能你把c中的()用成了shell中的[ ] ,把shell中的 = 用成了c中的 == ,所以自己都混乱了,编程还是按特定语言的语法来吧!
|
[ ] [[ ]] 是必须要用的 ,(()) 也用
|
比如说把 你声明了一个变量 x=1 在用到这个 变量的地方 都必须 要 $x
比如 输出这个变量 echo $x
比如 输出这个变量 echo $x
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。