UNPKG

2.46 kBMarkdownView Raw
1readonly
2===
3
4标记shell变量或函数为只读
5
6## 语法
7
8```shell
9readonly [-aAf] [name[=value] ...]
10readonly -p
11```
12
13## 主要用途
14
15- 定义一到多个变量并设置只读属性。
16- 为已定义的一到多个变量设置只读属性。
17- 显示全部包含只读属性的变量。
18- 为已定义的一到多个函数设置只读属性。
19- 显示全部包含只读属性的函数。
20
21## 选项
22
23```shell
24-a:指向数组。
25-A:指向关联数组。
26-f:指向函数。
27-p:显示全部只读变量。
28--:在它之后的选项无效。
29```
30
31## 参数
32
33```shell
34name(可选):变量名或函数名
35value(可选):变量的值
36```
37
38### 返回值
39
40readonly返回true除非你提供了非法选项或非法名称。
41
42## 例子
43
44```shell
45# 定义变量并增加只读属性
46readonly var1=13 var2
47readonly -a arr1=(1 2 3 4 5) arr2=('z' 'x' 'c')
48# 必须有 '-A' 选项
49readonly -A dict1=(['key1']='value1')
50```
51
52```shell
53# 先定义变量、函数,然后再为它们添加只读属性
54max=3
55readonly max
56
57# 数组定义时可以不加 `declare -a`
58seasons=('spring' 'summer' 'autumn' 'winter')
59# 为数组添加只读属性时可以不加 `-a` 选项
60readonly seasons
61
62declare -A man=(['age']=23 ['height']='190cm')
63# 为关联数组添加只读属性时可以不加 `-A` 选项
64readonly man
65
66function foo(){ echo 'bar'; }
67# 为函数添加只读属性时必须加 `-f` 选项
68readonly -f foo
69```
70
71```shell
72# 显示全部只读变量,以下两个命令的显示结果一样
73readonly
74readonly -p
75# 显示全部拥有只读属性的数组
76readonly -a
77# 显示全部拥有只读属性的关联数组
78readonly -A
79# 显示全部拥有只读属性的函数
80readonly -f
81```
82
83## 常见错误
84
85对于只读变量而言,若用户对其值进行修改,则会立即报错。例如,使用该指令定义一个只读变量"test",并且将其值初始化为"ok",输入如下命令:
86
87```shell
88[root@localhost ~]# readonly test='ok' #定义只读变量并初始化
89```
90
91那么当用户直接修改该只读变量时就会报错,如下所示:
92
93```shell
94[root@localhost ~]# test='my' #试图修改只读变量的值
95-bash: test: readonly variable
96```
97
98当用户试图修改只读变量的值时,会被提示该变量为只读变量。
99
100## 注意
101
1021. 该命令是bash内建命令,相关的帮助信息请查看`help`命令。
1032. `declare +r`不能去除只读属性, `unset`不能删除只读变量。
104
105