Skip to content

Commit cc9382a

Browse files
authored
Update readonly.md
更新文档内容,我自己检查了格式。
1 parent 5af632f commit cc9382a

File tree

1 file changed

+75
-23
lines changed

1 file changed

+75
-23
lines changed

command/readonly.md

Lines changed: 75 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,97 @@
11
readonly
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

Comments
 (0)