十分钟轻松学习系列: 2020-3-19_SHELL学习_变量进阶

本章是针对上一章关于变量应用的进阶用法

  • 变量防篡改 - readonly

需求:老子认为自己是世界上最英俊的男子,不接受任何反驳,但是代码出现问题如下:

#!/bin/bash
THEMOSTHANDSOMEMAN="璐璐桑"
THEMOSTHANDSOMEMAN="庞统"
echo "墨镜墨镜请告诉我谁是这个世界上最帅的人:$THEMOSTHANDSOMEMAN"

结果翻车了。。。
结果翻车了
所以为了防止后面有人恶意或者无意篡改我的变量,我应该如何保证自己是世界上最英俊的人?

#!/bin/bash
readonly THEMOSTHANDSOMEMAN="璐璐桑"
THEMOSTHANDSOMEMAN="庞统"
echo "墨镜墨镜请告诉我谁是这个世界上最帅的人:$THEMOSTHANDSOMEMAN"

看下图报错,报错告知这个最英俊名额被锁定了,庞统完犊子了,我才是世界上最英俊的人!
在这里插入图片描述
敲黑板!敲黑板!敲黑板! ==> 这个功能还挺常用的,尤其针对一些可能会重名的变量值。
知识扩展: linux命令 #unset <变量名> 可以把这个变量废了,无法再引用,但是对只读变量无效

  • 全局变量和局部变量 - local

从故事开始,一个机构下面五个部门,五个部门每年有财政预算,机构为每个部门拨款:
case1:部门1:“老大,没钱了,给点” ===> 老大:“拿着~”
case2: 部门1:“兄弟,我们没钱了给点” ===> 部门2:“滚!”
case3:老大:“老弟,没钱了,给点” ===> 部门1:“你找部门[≠1]去要”
这个故事就是说,我们可以扒外,但是你不能吃里!

同时定义了一个局部一个shell全局变量,看输出结果

#!/bin/bash
local VAR1=100
VAR1=200
echo $VAR1

200打印出来了是shell全局变量,看local局部变量怎么报错的,这个local只能用在function里:
在这里插入图片描述
解释这个事儿,我用一段代码:

#!/bin/bash
VAR1=200
function A1() {
local VAR1=10
echo $VAR1
}
function A2() {
local VAR1=20
echo $VAR1
}
echo $VAR1 # 这个是shell全局的变量,所以肯定是200
A1         # 不用管这个什么意思,调用了函数,打印了VAR1,但是是A1函数中的VAR1,也就是10
A2         # 这个自然就是20了,学过编程一定要了解作用域

结果见下图,分析的没有问题:
在这里插入图片描述

  • 变量类型以及常见用法

从故事开始:来~打印一个反斜杠 \ 双刀乐$$ 再来个双引号"
自己去试吧,我把结果给你们:

#!/bin/bash
echo "\"    # ./1.sh: line 3: unexpected EOF while looking for matching `"
echo \      # 啥都没有
echo "      # ./1.sh: line 3: unexpected EOF while looking for matching `"'
echo $$     # 39858 这数字什么鬼
echo "$$"   # 39916 这又特么什么鬼

引出了如何打印特殊字符的问题,一句话:
特殊字符如果需要打印,echo 后面要把特殊字符用单引号引起来, 例如:

#!/bin/bash
echo '$$'   # $$
echo '\'    # \

单引号的作用就是取消特殊字符转义的功能!
双引号是字符串界限,但是具备特殊字符转义功能
记住上述两句话,如果要引用变量在字符串中替代某些值,一定不能用单引号,看下面的例子一下就明白了:

#!/bin/bash
THEMOSTHANDSOMEBOY="zhaolu"
echo "${THEMOSTHANDSOMEBOY}太特么帅了!"  #这个变量边界线昨天已经讲过了 ${}
echo '${THEMOSTHANDSOMEBOY}太特么帅了!'

看输出结果:
在这里插入图片描述
单引号没有转义特殊字符,直接否定了最帅的我,不开心了,今天就到这儿了,明天整理字符串相关内容。

发布了49 篇原创文章 · 获赞 18 · 访问量 3991

猜你喜欢

转载自blog.csdn.net/weixin_41047549/article/details/104946147