Shell变量:Shell变量的定义、删除变量、只读变量、变量类型

Shell变量:Shell变量的定义、删除变量、只读变量、变量类型

变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据。脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则。

在 Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。

这意味着,Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。

定义变量

Shell 支持以下三种定义变量的方式:

variable=value
variable='value'
variable="value"

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

注意,赋值号的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样。

Shell 变量的命名规范和大部分编程语言都一样:

  • 变量名由数字、字母、下划线组成;
  • 必须以字母或者下划线开头;
  • 不能使用 Shell 里的关键字(通过 help 命令可以查看保留关键字)。

使用变量

使用一个定义过的变量,只要在变量名前面加美元符号$即可,如:

author="pinghua"
echo $author
echo ${author}

变量名外面的花括号{ }是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界.

推荐给所有变量加上花括号{ },这是个良好的编程习惯.

修改变量的值

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

author=pinghua
echor ${author}
author=yuan
echo ${author}

第二次对变量赋值时不能在变量名前加$,只有在使用变量时才能加$.

单引号和双引号的区别

定义变量时,变量的值可以由单引号’ ‘包围,也可以由双引号” “包围,它们到底有什么区别呢?

url="http://www.baidu.com"
website1='百度1:${url}'
website2="百度2:${url}"
echo $website1
echo $website2

运行结果:

百度1:${url}
百度2:http://www.baidu.com
  • 以单引号''包围变量的值时,单引号里面是什么就输出什么,即使用里面有变量或命令,也会把它们原样输出。这种方式比较适合输出纯字符串的情况,即不希望解析变量或命令
  • 以双引号""包含围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号里的内容原样输出。这种方式比较适合字符串中包含变量或命令,并且希望将其解析后再输出的变量定义

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

将命令的结果赋值给变量

Shell 也支持将命令的执行结果赋值给变量,常见的有以下两种方式:

variable=`command`
variable=$(command)
  • 第一种方式把命令用反引号包围起来,反引号和单引号非常相似,容易产生混淆,所以不推荐使用这种方式;
  • 第二种方式把命令用$()包围起来,区分更加明显,所以推荐使用这种方式。

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

删除变量

使用 unset 命令可以删除变量。语法:

unset variable_name

变量被删除后不能再次使用;unset 命令不能删除只读变量

变量类型

运行shell时,会同时存在三种变量:
1) 局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行


   转载规则


《Shell变量:Shell变量的定义、删除变量、只读变量、变量类型》 志鹏 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数 Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量。 特殊变量列表 变量 含义 $0 当前脚本
2019-09-14 志鹏
下一篇 
shell脚本学习笔记 shell脚本学习笔记
什么是shellShell 是一种脚本语言任何代码最终都要被“翻译”成二进制的形式才能在计算机中执行。 有的编程语言,如 C/C++、Pascal、Go语言、汇编等,必须在程序运行之前将所有代码都翻译成二进制形式,也就是生成可执行文件,用户
2019-09-13 志鹏
  目录