在编程过程中,我们经常会使用到一些常量,也就是值不需要改变的变量,在许多编程语言提供了常量的定义方式,比如c/c++的define MAXNUM 99999 或 const int a = 7,javasccipt的const a=7, 等等。
跟以上这些方法不同,在Linux shell编程中,Linux提供了readonly命令用来定义一到多个变量并设置只读属性。所以我们这个内容单独拿出来学习。
一、readonly命令的功能
readonly命令主要功能有五个:
(一)定义一到多个变量并设置只读属性,
(二)为已定义的一到多个变量设置只读属性
(三)显示全部包含只读属性的变量
(四)为已定义的一到多个函数设置只读属性
(五)显示全部包含只读属性的函数
二、readonly命令的语法
语法格式: readonly [-aAf] [-p] [name[=value] ...]
常用选项:
-a :指向数组
-A :指向关联数组
-p :显示全部只读变量
-f :指向函数常用参数:
name(可选):变量名或函数名
value(可选):变量的值返回值:
readonly返回true除非你提供了非法选项或非法名称。
其中的选项来源如下,方便大家记忆:
-a:array
-A:Associative Array
-p:print
-f:function
三、使用说明
(一)单独执行 readonly 或使用选项 -p 可以输出显示系统中所有已定义的只读变量和函数。
(二)unset命令不能删除只读变量。
四、实例
user@host :~ $ readonly var1="test"
user@host :~ $ echo $var1
test
user@host : ~ $ var1="newvalue"
-sh: var1 : is read only
user@host : ~ $ readonly -n var1
user@host : ~ $ readonly
readonly var1=‘test’
user@host : ~ $ unset var1
-sh: unset : var1: is read only
user@host : ~ $
在上面的例子中,我们首先用命令readonly var1="test" 定义了变量var1,初始化其值为"test",并设置了只读属性,
然后用命令echo $var1显示其值
接着我们尝试命令var1="newvalue",想给var1设置新的值,但是没有成功,系统提示-sh: var1 : is read only
接着我们尝试命令readonly -n var1来取消var1的只读属性。在上面readonly命令语法中是没有-n这个选项的,但我在网上看到有网友说 readonly命令还包括 -n 选项:
An argument of `-n' says to remove the readonly property from subsequent NAMEs.
于是尝试了一下,至少在sh中,readonly -n不能取消只读属性。
接着我们使用命令readonly查看当前具有只读属性的变量,结果只有一个:readonly var1= test
最后我们尝试命令unset var1来删除变量var1,但没有成功:-sh: unset : var1: is read only
关于如何删除具有只读属性的变量,我还尝试了网友在网上给出的另一种方法:
user@host :~ $ cat << EOF|gdb
>attach $$
>call unbind_variable("var1")
>detach
>EOF
-sh: gdb: not found
user@host :~ $ cat << EOF
>attach $$
>call unbind_variable("var1")
>detach
>EOF
attach 640
call unbind_variable("var1")
detach
user@host :~ $ readonly
readonly var1='test'
user@host :~ $
网友给的方法中要调用 gdb,但在sh中找不到gdb。
不使用gdb,则不能删除具有只读属性的变量var1。