Shell变量:Shell变量的定义、赋值和删除
在 Bash shell 中,每一个变量的值都是字符串,无论你给变量赋值时有没有使用引号,值都会以字符串的形式存储。
这意味着,Bash shell 在默认情况下不会区分变量类型,即使你将整数和小数赋值给变量,它们也会被视为字符串,这一点和大部分的编程语言不同。例如在C语言或者 C++ 中,变量分为整数、小数、字符串、布尔等多种类型。
当然,如果有必要,你也可以使用 Shell declare 关键字显式定义变量的类型,但在一般情况下没有这个需求,Shell 开发者在编写代码时自行注意值的类型即可。
定义变量
Shell 支持以下三种定义变量的方式:
variable=value
variable='value'
variable="value"
variable 是变量名,value 是赋给变量的值。如果 value 不包含任何空白符(例如空格、Tab 缩进等),那么可以不使用引号;如果 value 包含了空白符,那么就必须使用引号包围起来。使用单引号和使用双引号也是有区别的,稍后我们会详细说明。注意,赋值号
=
的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样。Shell 变量的名规范和大部分编程语言都一样:
变量名由数字、字母、下划线组成;
必须以字母或者下划线开头;
不能使用 Shell 里的关键字(通过 help 令可以查看保留关键字)。
变量定义举例:
变量名外面的花括号url=http://c.biancheng网站站点" rel="nofollow" />
author="严长生"
echo $author
echo ${author}
{ }
是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:如果不给 skill 变量加花括号,写成skill="Java"
echo "I am good at ${skill}Script"
echo "I am good at $skillScript"
,解释器就会把 $skillScript 当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。给所有变量加上花括号
{ }
,这是个良好的编程习惯。修改变量的值
已定义的变量,可以被重新赋值,如:
url="http://c.biancheng网站站点" rel="nofollow" />
#!/bin/bash
url="http://c.biancheng网站站点" rel="nofollow" />
种方式把令用反引号我的建议:如果变量的内容是数字,那么可以不加引号;如果真的需要原样输出就加单引号;其他没有特别要求的字符串等最好都加上双引号,定义变量时加双引号是最常见的使用场景。 将令的结果赋值给变量
Shell 也支持将令的执行结果赋值给变量,常见的有以下两种方式:
variable=`command`
variable=$(command)
` `
(位于 Esc 键的下方)包围起来,反引号和单引号非常相似,容易产生混淆,所以不使用这种方式;第二种方式把令用$()
包围起来,区分更加明显,所以使用这种方式。例如,我在 demo 目录中创建了一个名为 log.txt 的文本文件,用来记录我的日常工作。下面的代码中,使用 cat 令将 log.txt 的内容读取出来,并赋值给一个变量,然后使用 echo 令输出。
[mozhiyan@localhost ~]$ cd demo
[mozhiyan@localhost demo]$ log=$(cat log.txt)
[mozhiyan@localhost demo]$ echo $log
严长生正在编写Shell教程,教程地址:http://c.biancheng网站站点" rel="nofollow" />
#!/bin/bash
myUrl="http://c.biancheng网站站点" rel="nofollow" />
bash: myUrl: This variable is read only.
删除变量
使用 unset 令可以删除变量。语法:变量被删除后不能再次使用;unset 令不能删除只读变量。unset variable_name
举个例子:
#!/bin/sh
myUrl="http://c.biancheng网站站点" rel="nofollow" />