readonly

标记shell变量或函数为只读

语法

  1. readonly [-aAf] [name[=value] ...]
  2. readonly -p

主要用途

  • 定义一到多个变量并设置只读属性。
  • 为已定义的一到多个变量设置只读属性。
  • 显示全部包含只读属性的变量。
  • 为已定义的一到多个函数设置只读属性。
  • 显示全部包含只读属性的函数。

选项

  1. -a:指向数组。
  2. -A:指向关联数组。
  3. -f:指向函数。
  4. -p:显示全部只读变量。
  5. --:在它之后的选项无效。

参数

  1. name(可选):变量名或函数名
  2. value(可选):变量的值

返回值

readonly返回true除非你提供了非法选项或非法名称。

例子

  1. # 定义变量并增加只读属性
  2. readonly var1=13 var2
  3. readonly -a arr1=(1 2 3 4 5) arr2=('z' 'x' 'c')
  4. # 必须有 '-A' 选项
  5. readonly -A dict1=(['key1']='value1')
  1. # 先定义变量、函数,然后再为它们添加只读属性
  2. max=3
  3. readonly max
  4. # 数组定义时可以不加 `declare -a`
  5. seasons=('spring' 'summer' 'autumn' 'winter')
  6. # 为数组添加只读属性时可以不加 `-a` 选项
  7. readonly seasons
  8. declare -A man=(['age']=23 ['height']='190cm')
  9. # 为关联数组添加只读属性时可以不加 `-A` 选项
  10. readonly man
  11. function foo(){ echo 'bar'; }
  12. # 为函数添加只读属性时必须加 `-f` 选项
  13. readonly -f foo
  1. # 显示全部只读变量,以下两个命令的显示结果一样
  2. readonly
  3. readonly -p
  4. # 显示全部拥有只读属性的数组
  5. readonly -a
  6. # 显示全部拥有只读属性的关联数组
  7. readonly -A
  8. # 显示全部拥有只读属性的函数
  9. readonly -f

常见错误

对于只读变量而言,若用户对其值进行修改,则会立即报错。例如,使用该指令定义一个只读变量”test”,并且将其值初始化为”ok”,输入如下命令:

  1. [root@localhost ~]# readonly test='ok' #定义只读变量并初始化

那么当用户直接修改该只读变量时就会报错,如下所示:

  1. [root@localhost ~]# test='my' #试图修改只读变量的值
  2. -bash: test: readonly variable

当用户试图修改只读变量的值时,会被提示该变量为只读变量。

注意

  1. 该命令是bash内建命令,相关的帮助信息请查看help命令。
  2. declare +r不能去除只读属性, unset不能删除只读变量。