if语句的一个疑问

sh/bash/dash/ksh/zsh等Shell脚本
回复
晓夜寻梦
帖子: 5
注册时间: 2015-09-06 17:19
系统: Ubuntu

if语句的一个疑问

#1

帖子 晓夜寻梦 » 2015-09-09 21:17

if [ ${str1} = “abc" ] 和 if [ ${str1}=“abc" ]有什么却别,大神们,帮下忙,谢啦
头像
b33e
帖子: 3864
注册时间: 2011-06-07 14:20
系统: Mint18

Re: if语句的一个疑问

#2

帖子 b33e » 2015-09-09 22:27

空格没注意
注意全角和半角,应该是"abc"
晓夜寻梦
帖子: 5
注册时间: 2015-09-06 17:19
系统: Ubuntu

Re: if语句的一个疑问

#3

帖子 晓夜寻梦 » 2015-09-10 9:10

可是我在Ubuntu下面执行,结果不一样啊
b33e 写了:你这写的一模一样
注意全角和半角,应该是"abc"
晓夜寻梦
帖子: 5
注册时间: 2015-09-06 17:19
系统: Ubuntu

Re: if语句的一个疑问

#4

帖子 晓夜寻梦 » 2015-09-10 9:33

可以参照这个图片[img]/home/caixiaodong/桌面/Test/2015-09-10%2009:28:15%20的屏幕截图.png[/img]




/home/caixiaodong/桌面/Test/2015-09-10 09:28:15 的屏幕截图.png
头像
HuntXu
帖子: 5776
注册时间: 2007-09-29 3:09

Re: if语句的一个疑问

#5

帖子 HuntXu » 2015-09-10 9:50

man test看,等号左右两边的空格是不能省的
HUNT Unfortunately No Talent...
晓夜寻梦
帖子: 5
注册时间: 2015-09-06 17:19
系统: Ubuntu

Re: if语句的一个疑问

#6

帖子 晓夜寻梦 » 2015-09-10 10:27

HuntXu 写了:man test看,等号左右两边的空格是不能省的
英文看不懂啊,能不能简单的说下。谢啦!

#! /bin/bash

str1="abc"

if [ $str1="efg" ]
then
echo "OK"
else
echo "NG"

fi

为什么输出OK,不输出NG
poloshiao
论坛版主
帖子: 18279
注册时间: 2009-08-04 16:33

Re: if语句的一个疑问

#7

帖子 poloshiao » 2015-09-10 11:55

等号左右两边的空格是不能省的
图片

字串
有空格
沒空格
一樣嗎
查一下
Russell_D_Lee
帖子: 4
注册时间: 2015-09-23 9:26

Re: if语句的一个疑问

#8

帖子 Russell_D_Lee » 2015-09-23 10:43

使用[]代替test时,正如 poloshiao所言,等号两边的空格是不能少的。
至于为什么

代码: 全选

#! /bin/bash

str1="abc"

if [ $str1="efg" ]
then
echo "OK"
else
echo "NG"

fi

会输出OK,我的理解如下(给大家做个参考,也不知是否正确):
[ $str1="efg" ] 被解释为test $str1="efg",即测试指令abc="efg"是否正确运行。
给变量abc赋值"efg",显然是能够执行成功的,所以输出OK。
头像
astolia
论坛版主
帖子: 6396
注册时间: 2008-09-18 13:11

Re: if语句的一个疑问

#9

帖子 astolia » 2015-09-24 11:57

Russell_D_Lee 写了:使用[]代替test时,正如 poloshiao所言,等号两边的空格是不能少的。
至于为什么

代码: 全选

#! /bin/bash

str1="abc"

if [ $str1="efg" ]
then
echo "OK"
else
echo "NG"

fi

会输出OK,我的理解如下(给大家做个参考,也不知是否正确):
[ $str1="efg" ] 被解释为test $str1="efg",即测试指令abc="efg"是否正确运行。
给变量abc赋值"efg",显然是能够执行成功的,所以输出OK。
你的理解是错误的。[和test作为bash的内建命令,后面的参数abc="efg"并不解释为变量赋值,仅仅是一个普通的字符串,只要非空就为真
请自行阅读bash的manpage:
http://www.gnu.org/software/bash/manual ... xpressions
回复