• 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。

                    

  • 相关阅读:
    前端登录退出:处理Token问题(获取、缓存、失效处理)以及代码实现
    【小程序】页面导航
    【网络安全】--win提权
    基于注解的Spring MVC实例开发过程
    产品说明丨Android端使用MobPush快速集成方法
    (王道考研计算机网络)第四章网络层-第五节2:OSPF协议与链路状态算法
    基于SpringMVC架构对Request进行参数重写
    【Rust 日报】2022-11-25 Rust 真的要上天了!
    【数据科学项目02】:NLP应用之垃圾短信/邮件检测(端到端的项目)
    OpenCV----Adabins单目深度估计LibTorch推理
  • 原文地址:https://blog.csdn.net/Purpleendurer/article/details/133514724