Shell变量知多少

前言

本篇文章会着重讨论关于Shell变量的一些细节要点,例如Shell变量的类型是什么,定义Shell变量的几种方式以及它们的区别等,加深大家对Shell变量的理解,以及在各个场景下如何灵活运用变量。

Let’s get started.

Shell 变量专题

1. Shell变量的类型是什么

在Shell中,给变量赋予的值都被视为字符串类型。

2. 如何定义Shell变量

定义Shell变量的三种方式

name=Tom
name='Tom'
name="Tom"

注意:"=" 两边不能有空格。对于第一种方式,赋予的值不能含有空格,如果包含空格,必须用引号。例如:

#以下定义是错误的:
name=Tom W 

那么单引号和双引号有什么区别呢?
对于普通的字符串,用单引号和双引号效果是一样的,但如果赋予的值中包含了变量,希望最终能将变量的值包含在当前的赋予值中,则必须用双引号。举个例子:

name=Tony
hello="Hello, ${name}"
echo ${hello}

如果希望获得${name}的值Tony, 则必须用双引号:

Hello, Tony

如果用单引号,就会变成以下结果:

Hello,${name}

3. 聊聊Shell中的全局变量,局部变量,环境变量

全局变量:在当前Shell进程中可以被使用的变量。
局部变量:仅能在函数内部使用的变量。
环境变量:在当前Shell进程以及Shell子进程中都能使用的变量。

说明:
1 关于全局变量,Shell 中默认定义的变量都是全局变量,即使变量定义在函数中,也是全局变量。
2 局部变量必须用关键字local进行声明。
例子:

function A() {
	#这里的a依旧可以在函数外部被调用。
	a=1
	#这里的b才是正真的局部变量。
	local b=1
}

这里申明了一个函数,函数内部定义了两个变量a,b。其中,a是全局变量,b是局部变量。

3 环境变量要通过export关键字进行声明,这样在子Shell进程中也可以引用。但要注意,这种环境变量是传子不传父的。如果在Shell子进程定义一个变量并通过export 声明为环境变量,那么该进程的父进程是无法获得这个变量的。

4 怎么创建只读变量

格式:
readonly variableName

例子:

name=Tony
readonly name
name=Alice
test1.sh: line 3: name: readonly variable

5 命令结果如何赋值给变量

两种方式(直接通过代码说明):

#方法1
a=`cat test.txt`
#方法2
b=$(cat test.txt)

两种方式都可以获取命令结果并赋值给变量。它们的区别在于:
方法1是无法做嵌套的,但方法2是可以的。

举个例子:

正确:

path=$(cd $(dirname $0);pwd)
echo ${path}

错误:

path=`cd `dirname $0`;pwd`
echo ${path}

希望对大家有所帮助。

Tony

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值