Shell的两个知识点引发的思考:关于"="的使用

#!/bin/bash

name="Enming"

if [ $name = "Enming" ]
then
   echo "Hello $name !"
fi

在学习Shell关于“条件测试”的知识时提到,“等于”是用一个等号( = )来表示的(用两个等号来表示“等于”的判断也是可以的),用于比较两个字符串是否相等,但是纳闷的是,赋值也是用“=”,这样不是冲突了吗?

直到发现了这个知识点:

--已定义的变量,可以被重新定义
your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name
# 注意,第二次赋值的时候不能写$your_name="alibaba",使用变量的时候才加美元符($)

可以发现,“=”用做赋值功能时,前面是一个不带美元符($)的变量名,如:your_name="tom";
用做比较功能时,前面跟的就不能是一个不带美元符($)的变量名了,可能是一个被定义过的已知变量,如$name = "Enming",也可能是一个带双引号的常量。

再提一点,提到的第二次赋值的时候不能写$your_name="alibaba",可以理解为第二次赋值时,重新定义了一个名字一样的变量,把之前的变量名及内容完全覆盖了,是一个崭新的变量。

posted @ 2021-08-17 22:27  向日葵的跋涉  阅读(487)  评论(0编辑  收藏  举报