11readonly
22===
33
4- 定义只读shell变量或函数
4+ 标记shell变量或函数为只读
55
6- ## 补充说明
6+ ### 概要
77
8- ** readonly命令 ** 用于定义只读shell变量和shell函数。readonly命令的选项-p可以输出显示系统中所有定义的只读变量。
8+ readonly [ -aAf ] [ name [ =value ] ... ]
99
10- ### 语法
10+ readonly -p
1111
12- ``` shell
13- readonly(选项)(参数)
14- ```
12+ ### 主要用途
13+
14+ - 定义一到多个变量并设置只读属性。
15+
16+ - 为已定义的一到多个变量设置只读属性。
17+
18+ - 显示全部包含只读属性的变量。
1519
16- ### 选项
20+ - 为已定义的一到多个函数设置只读属性。
21+
22+ - 显示全部包含只读属性的函数。
23+
24+
25+ #### 选项
1726
1827``` shell
19- -f:定义只读函数;
20- -a:定义只读数组变量;
21- -p:显示系统中全部只读变量列表。
28+ -a:指向数组。
29+ -A:指向关联数组。
30+ -f:指向函数。
31+ -p:显示全部只读变量。
32+ --:在它之后的选项无效。
2233```
2334
24- ### 参数
35+ #### 参数
36+
37+ name(可选):变量名或函数名
38+
39+ value(可选):变量的值
2540
26- 变量定义:定义变量,格式为“变量名=‘变量值’”。
41+ #### 返回值
2742
28- ### 实例
43+ readonly返回true除非你提供了非法选项或非法名称。
2944
30- 使用readonly命令显示系统中所有的已经定义的只读变量,输入如下命令:
45+ ### 例子
3146
3247``` shell
33- [root@localhost ~ ]# readonly #显示只读变量
34- declare -ar BASH_VERSINFO=' ([0]="3" [1]="2" [2]="25" [3]="1" [4]="release" [5]="i686-redhat-linux-gnu")'
35- declare -ir EUID=" 0"
36- declare -ir PPID=" 31436"
37- declare -r SHELLOPTS=" braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor"
38- declare -ir UID=" 0"
48+ # 定义变量并增加只读属性
49+ readonly var1=13 var2
50+ readonly -a arr1=(1 2 3 4 5) arr2=(' z' ' x' ' c' )
51+ # 必须有 '-A' 选项
52+ readonly -A dict1=([' key1' ]=' value1' )
3953```
4054
55+ ``` shell
56+ # 先定义变量、函数,然后再为它们添加只读属性
57+ max=3
58+ readonly max
59+
60+ # 数组定义时可以不加 `declare -a`
61+ seasons=(' spring' ' summer' ' autumn' ' winter' )
62+ # 为数组添加只读属性时可以不加 `-a` 选项
63+ readonly seasons
64+
65+ declare -A man=([' age' ]=23 [' height' ]=' 190cm' )
66+ # 为关联数组添加只读属性时可以不加 `-A` 选项
67+ readonly man
68+
69+ function foo(){ echo ' bar' ; }
70+ # 为函数添加只读属性时必须加 `-f` 选项
71+ readonly -f foo
72+ ```
73+
74+ ``` shell
75+ # 显示全部只读变量,以下两个命令的显示结果一样
76+ readonly
77+ readonly -p
78+ # 显示全部拥有只读属性的数组
79+ readonly -a
80+ # 显示全部拥有只读属性的关联数组
81+ readonly -A
82+ # 显示全部拥有只读属性的函数
83+ readonly -f
84+ ```
85+
86+ ### 常见错误
87+
4188对于只读变量而言,若用户对其值进行修改,则会立即报错。例如,使用该指令定义一个只读变量"test",并且将其值初始化为"ok",输入如下命令:
4289
4390``` shell
4491[root@localhost ~ ]# readonly test='ok' #定义只读变量并初始化
4592```
4693
47- 那么当用户直接修改该只读变量时,就会被报错 ,如下所示:
94+ 那么当用户直接修改该只读变量时就会报错 ,如下所示:
4895
4996``` shell
5097[root@localhost ~ ]# test='my' #试图修改只读变量的值
@@ -53,5 +100,10 @@ declare -ir UID="0"
53100
54101当用户试图修改只读变量的值时,会被提示该变量为只读变量。
55102
103+ ### 注意
104+
105+ 1 . 该命令是bash内建命令,相关的帮助信息请查看` help ` 命令。
106+
107+ 2 . ` declare +r ` 不能去除只读属性, ` unset ` 不能删除只读变量。
56108
57- <!-- Linux命令行搜索引擎:https://jaywcjlove.github.io/linux-command/ -->
109+ <!-- Linux命令行搜索引擎:https://jaywcjlove.github.io/linux-command/ -->
0 commit comments