Shell本地变量

本地变量又叫局部变量,在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
当关闭终端,再开启一个,原来声明的变量不见了,变量设置为只读后不可废弃,不可修改。

定义变量

定义变量时,变量名不加美元符号($),如:

variable="hello yanfadi"

变量名命名规则如下:

  • 赋值等号两边不能有空格。
  • 变量名只能包括大小写字母(a-z 和 A-Z)、数字(0-9)、下划线(_)。
  • 变量名首个字符必须为字母(a-z 和 A-Z),不能以数字开头。
  • 不能使用标点符号。
  • 不能使用bash里面的关键字(可以使用help查看保留关键字)。
  • 如果等号右边的值中有空格,则必须使用双引号括起来。

变量定义示例:

myUrl="http://www.yanfadi.com"
myNum=100

使用变量

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

name="yanfadi"
echo $name
echo ${name}

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。
如下情况所示:

for skill in Action Java 
do
    echo "I am good at ${skill}Script"
done

输出结果:

I am good at ActionScript

I am good at JavaScript

如果不给skill加上花括号({}),写成

echo "I am good at $skillScript"

解释器就会将$skillScript当成一个变量(其值为空)。
执行结果如下:

I am good at

建议:给所有变量都加上花括号,养成编程的好习惯。

重新定义变量

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

myUrl="http://www.yanfadi.com"
echo ${myUrl}
myUrl="http://www.zimudou.com"
echo ${myUrl}

这样写是合法的,但注意,第二次赋值的时候不能写 $myUrl=”http://www.zimudou.com",使用变量的时候才加美元符($)。

只读变量

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

#!/bin/bash

myUrl="http://www.yanfadi.com"
readonly myUrl
myUrl="http://www.zimudou.com"

以上示例尝试更改只读变量myUrl,结果报错。结果如下:
myUrl: 只读变量

删除变量

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

usnet variable

变量删除后不能再次使用。示例:

#!/bin/sh

myUrl="http://yanfadi.com"
unset myUrl
echo $myUrl

以上脚本没有任何输出。
unset命令不能删除只读变量。示例:

#!/bin/sh

myUrl="http://yanfadi.com"
readonly myUrl
unset myUrl
echo $myUrl

运行以上脚本会出现 “myUrl:无法取消设定” 的错误信息。