shell 变量

目录

变量定义

变量赋值和使用

变量的作用域


变量定义

变量是任何一种编程语言都必不可少的,变量用来存放和指代各种数据。脚本语言的变量通常不需要指定数据类型,直接赋值就可以。

变量定义时,不需要加美元符号($),如:my_name="Crystal"

变量命名需要遵循以下规则:

  • 变量名和等号(也叫赋值符号)之间不能有空格;
  • 变量名只能使用英文字母,数字和下划线,首个字符不能以数字开头,中间不能使用空格;
  • 变量名不能使用bash中的关键字。

附上变量名示例:

变量赋值和使用

1. 变量赋值

先上示例,新建测试文件test2.sh,文件内容及脚本执行结果如下:

变量赋值
变量赋值和使用

shell支持三种赋值方式:

  • variable=value

  • variable='value'

  • variable="value"

variable 是变量名,value 是赋给变量的值。如果 value 不包含任何空白符(例如空格、Tab 缩进等),那么可以不使用引号;如果 value 包含了空白符,那么就必须使用引号包围起来。

使用单引号和使用双引号也是有区别的,通过下图的示例,我们来看看单引号和双引号的赋值有什么区别:

从上面的执行结果可以得出结论:

单引号赋值的特点:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用,示例如下:

双引号赋值的特点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

关于变量赋值,提出一下几点建议:

  • 变量的内容是数字,可以不加引号;
  • 需要原样输出,使用单引号赋值;
  • 其他没有特别要求的字符串等最好都加上双引号,定义变量时加双引号是最常见的使用场景。

2. 变量使用

使用变量时需要在变量名前加美元符号?,变量名外的花括号是可选的,但是建议加上花括号,可以帮助解释器有效的识别变量边界,示例如下:

从上面的图片可以看到,给变量加花括号后可以保证正确的输出结果。使用变量应该加上花括号{ },这是个良好的编程习惯。

3. 变量值修改

已定义的变量,可以被重新赋值,如下所示:

4. 将命令的结果赋值给变量

shell支持将命令的执行结果赋值给变量,有一下两种赋值方式:

  • val=`command` 注意,这里的符号不是单引号,是反引号,esc按键下方的符号

  • val=$(command) 使用符号$()将赋值内容圈起来,更容易理解

其中,val 是变量名,command 是要输出的命令。

例如,我将test.sh文件中的内容使用cat命令读取出来,然后复制给一个变量,使用echo输出,执行效果如下所示:

从上面的执行结果可以看出,test.sh文件中是有换行的,但是输出内容却以一行显示,那么如何才能让test.sh文件中的内容格式不混乱呢?接着看下面的输出,找找看有什么细微的差异:

所以,为了防止出现格式混乱的情况,尽量在使用变量时用双引号将其包围起来。

总结:

  • 一般情况下,两种变量的替换效果是等价的,可以任意使用,但是由于反引号看起来像是单引号,容易造成误解,不易读,使用$()更容易理解;
  • $() 支持嵌套,反引号不支持;
  • $() 仅在bash shell中有效,反引号可以在多种shell中使用。

变量的作用域

shell变量的作用域就是shell变量的有效范围,shell变量的作用域可以分为三种:

  • 仅在当前shell实例中有效,其他shell启动的程序不能访问的变量,这叫做全局变量(global variable);
  • 有的变量只能在函数内部使用,这叫做局部变量(local variable);
  • 所有的程序,包括shell启动的程序,都能访问的变量,这叫做环境变量(environment variable)。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值