• Linux shell编程学习笔记7:只读变量


    在编程过程中,我们经常会使用到一些常量,也就是值不需要改变的变量,在许多编程语言提供了常量的定义方式,比如c/c++的define MAXNUM 99999 或 const int  a = 7,javasccipt的const a=7, 等等。

    跟以上这些方法不同,在Linux shell编程中,Linux提供了readonly命令用来定义一到多个变量并设置只读属性。所以我们这个内容单独拿出来学习。

    一、readonly命令的功能

    readonly命令主要功能有五个:

    (一)定义一到多个变量并设置只读属性,
    (二)为已定义的一到多个变量设置只读属性
    (三)显示全部包含只读属性的变量
    (四)为已定义的一到多个函数设置只读属性
    (五)显示全部包含只读属性的函数

    二、readonly命令的语法

    语法格式: readonly [-aAf] [-p] [name[=value] ...]


    常用选项:
    -a :指向数组
    -A :指向关联数组
    -p :显示全部只读变量
    -f  :指向函数

    常用参数:

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

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

    其中的选项来源如下,方便大家记忆:

    -a:array

    -A:Associative Array

    -p:print

    -f:function

    三、使用说明

    (一)单独执行 readonly 或使用选项 -p 可以输出显示系统中所有已定义的只读变量和函数。

    (二)unset命令不能删除只读变量。
     

    四、实例

    user@host :~ $ readonly var1="test"
    user@host :~ $ echo $var1
    test
    user@host : ~ $ var1="newvalue"
    -sh: var1 : is read only
    user@host : ~ $ readonly -n var1
    user@host : ~ $ readonly
    readonly var1=‘test’
    user@host : ~ $ unset var1
    -sh: unset : var1: is read only
    user@host : ~ $

     在上面的例子中,我们首先用命令readonly var1="test" 定义了变量var1,初始化其值为"test",并设置了只读属性,

    然后用命令echo $var1显示其值

    接着我们尝试命令var1="newvalue",想给var1设置新的值,但是没有成功,系统提示-sh: var1 : is read only

    接着我们尝试命令readonly -n var1来取消var1的只读属性。在上面readonly命令语法中是没有-n这个选项的,但我在网上看到有网友说 readonly命令还包括 -n 选项:

     An argument of `-n' says to remove the readonly property   from subsequent NAMEs.

    于是尝试了一下,至少在sh中,readonly -n不能取消只读属性。

    接着我们使用命令readonly查看当前具有只读属性的变量,结果只有一个:readonly var1= test

    最后我们尝试命令unset var1来删除变量var1,但没有成功:-sh: unset : var1: is read only

    关于如何删除具有只读属性的变量,我还尝试了网友在网上给出的另一种方法:

    user@host :~ $ cat << EOF|gdb
    >attach $$
    >call unbind_variable("var1")
    >detach
    >EOF
    -sh: gdb: not found
    user@host :~ $ cat << EOF
    >attach $$
    >call unbind_variable("var1")
    >detach
    >EOF
    attach 640
    call unbind_variable("var1")
    detach
    user@host :~ $ readonly
    readonly var1='test'
    user@host :~ $ 

    网友给的方法中要调用 gdb,但在sh中找不到gdb。

    不使用gdb,则不能删除具有只读属性的变量var1。

                    

  • 相关阅读:
    【第98题】JAVA高级技术-网络编程17(简易聊天室12:实现客户端一对一聊天)
    BOM系列之localStorage
    Flutter,点击图标后,显示下拉条目选框
    【3维视觉】20230922_网格编码最新进展
    win11更新后任务栏空白怎么办? win11更新后任务栏空白卡死的解决方法
    nginx--指令
    鸿蒙开发HarmonyOS4.0入门与实践
    OpenCV(二十九):图像腐蚀
    内网穿透怎么设置?内网映射外网需要注意什么
    可变长子网划分
  • 原文地址:https://blog.csdn.net/Purpleendurer/article/details/133514724