在编程过程中,我们经常会使用到一些常量,也就是值不需要改变的变量,在许多编程语言提供了常量的定义方式,比如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 : ~ $

Linux shell编程学习笔记7:只读变量_只读变量

 在上面的例子中,我们首先用命令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 :~ $ 

Linux shell编程学习笔记7:只读变量_只读变量_02

网友给的方法中要调用 gdb,但在sh中找不到gdb。

不使用gdb,则不能删除具有只读属性的变量var1。