当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 2 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 为什么这个shell里的test不正常?
帖子发表于 : 2016-09-25 21:31 

注册: 2011-07-29 19:16
帖子: 58
送出感谢: 31
接收感谢: 0 次
代码:
str1="abc"
str2="aba"
if test str1=str2
then
   echo "str1 equals str2."
else
   echo "str1 does not equal str2."
fi


本来两字符串变量不相等,结果输出str1 equals str2.。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 为什么这个shell里的test不正常?
帖子发表于 : 2016-09-25 21:50 
头像

注册: 2011-03-20 13:12
帖子: 4521
地址: 山东省寿光县
系统: Debian
送出感谢: 105
接收感谢: 997
1. 要用 $ 展开变量
2. 等号两端要有空格。
因此应为:
代码:
str1="abc"
str2="aba"
if test $str1 = $str2
then
   echo "str1 equals str2."
else
   echo "str1 does not equal str2."
fi


[解释]
test $str1 = $str2
这样 test 得到三个参数:abc, =, aba。又因为第二个参数为 =,所以接下来比较第一个参数和第三个参数是否相等;
test str1=str2
这样 test 仅得到一个参数 str1=str2,不会进入比较程序。又因为字符串 str1=str2 非空,所以直接返回真。
实际上,test str1=str2 和 test akshfdlak 没有本质区别(?),因其都只收到一个参数且为非空字符串。(?)

[例]
代码:
$ test a=b; echo $?
0
$ test "a" = "b"; echo $?
1


[参考]
http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
http://askubuntu.com/questions/351765/bash-if-statement-compare-two-strings
http://stackoverflow.com/questions/4977367/why-equal-to-operator-does-not-work-if-its-not-surrounded-by-space
http://wiki.bash-hackers.org/commands/classictest
http://ss64.com/bash/test.html


_________________
Debian 中文论坛 - forums.debiancn.org
欢迎所有 Debian GNU/Linux 用户



_________________
评价: 3.7% gtiubvrd
 
页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 2 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译