Update readonly.md

更新文档内容,我自己检查了格式。
This commit is contained in:
ZhuangZhu-74 2019-07-01 15:56:56 +08:00 committed by GitHub
parent 5af632fb3c
commit cc9382aab5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 77 additions and 25 deletions

View File

@ -1,50 +1,97 @@
readonly readonly
=== ===
定义只读shell变量或函数 标记shell变量或函数为只读
## 补充说明 ### 概要
**readonly命令** 用于定义只读shell变量和shell函数。readonly命令的选项-p可以输出显示系统中所有定义的只读变量。 readonly [-aAf] [name[=value] ...]
### 语法 readonly -p
### 主要用途
- 定义一到多个变量并设置只读属性。
- 为已定义的一到多个变量设置只读属性。
- 显示全部包含只读属性的变量。
- 为已定义的一到多个函数设置只读属性。
- 显示全部包含只读属性的函数。
#### 选项
```shell ```shell
readonly(选项)(参数) -a指向数组。
-A指向关联数组。
-f指向函数。
-p显示全部只读变量。
--:在它之后的选项无效。
``` ```
### 选项 #### 参数
name可选变量名或函数名
value可选变量的值
#### 返回值
readonly返回true除非你提供了非法选项或非法名称。
### 例子
```shell ```shell
-f定义只读函数 # 定义变量并增加只读属性
-a定义只读数组变量 readonly var1=13 var2
-p显示系统中全部只读变量列表。 readonly -a arr1=(1 2 3 4 5) arr2=('z' 'x' 'c')
# 必须有 '-A' 选项
readonly -A dict1=(['key1']='value1')
``` ```
### 参数
变量定义:定义变量,格式为“变量名=‘变量值’”。
### 实例
使用readonly命令显示系统中所有的已经定义的只读变量输入如下命令
```shell ```shell
[root@localhost ~]# readonly #显示只读变量 # 先定义变量、函数,然后再为它们添加只读属性
declare -ar BASH_VERSINFO='([0]="3" [1]="2" [2]="25" [3]="1" [4]="release" [5]="i686-redhat-linux-gnu")' max=3
declare -ir EUID="0" readonly max
declare -ir PPID="31436"
declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor" # 数组定义时可以不加 `declare -a`
declare -ir UID="0" seasons=('spring' 'summer' 'autumn' 'winter')
# 为数组添加只读属性时可以不加 `-a` 选项
readonly seasons
declare -A man=(['age']=23 ['height']='190cm')
# 为关联数组添加只读属性时可以不加 `-A` 选项
readonly man
function foo(){ echo 'bar'; }
# 为函数添加只读属性时必须加 `-f` 选项
readonly -f foo
``` ```
```shell
# 显示全部只读变量,以下两个命令的显示结果一样
readonly
readonly -p
# 显示全部拥有只读属性的数组
readonly -a
# 显示全部拥有只读属性的关联数组
readonly -A
# 显示全部拥有只读属性的函数
readonly -f
```
### 常见错误
对于只读变量而言,若用户对其值进行修改,则会立即报错。例如,使用该指令定义一个只读变量"test",并且将其值初始化为"ok",输入如下命令: 对于只读变量而言,若用户对其值进行修改,则会立即报错。例如,使用该指令定义一个只读变量"test",并且将其值初始化为"ok",输入如下命令:
```shell ```shell
[root@localhost ~]# readonly test='ok' #定义只读变量并初始化 [root@localhost ~]# readonly test='ok' #定义只读变量并初始化
``` ```
那么当用户直接修改该只读变量时,就会被报错,如下所示: 那么当用户直接修改该只读变量时就会报错,如下所示:
```shell ```shell
[root@localhost ~]# test='my' #试图修改只读变量的值 [root@localhost ~]# test='my' #试图修改只读变量的值
@ -53,5 +100,10 @@ declare -ir UID="0"
当用户试图修改只读变量的值时,会被提示该变量为只读变量。 当用户试图修改只读变量的值时,会被提示该变量为只读变量。
### 注意
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ --> 1. 该命令是bash内建命令相关的帮助信息请查看`help`命令。
2. `declare +r`不能去除只读属性, `unset`不能删除只读变量。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->