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

news2024/12/29 10:34:29

在编程过程中,我们经常会使用到一些常量,也就是值不需要改变的变量,在许多编程语言提供了常量的定义方式,比如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。

                

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1059312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

协议栈——连接服务器

如对方的ip和port配置信息&#xff0c;这里的连接是指通信前的准备工作 上一篇介绍查看套接字的命令时&#xff0c;可以看到很多信息&#xff0c;但是刚刚创建出来的套接字是什么信息都没有的&#xff0c;协议栈也因此不知道和谁通信&#xff1b; 客户端填补信息 这一步中调…

免杀对抗-DLL劫持免杀

C&Py-DLL劫持-语言-调用加载 1.使用visual studio创建项目 2.将文件名重命名为.c后缀 3.将如下加载器代码生成dll文件 加载器代码&#xff1a; #include "pch.h" #include <Windows.h> #include <stdio.h> #include <string.h>#pragma comment…

Python绘图系统26:坐标和绘图函数设置

文章目录 封装绘图函数绘图系统简单的修改源代码 Python绘图系统&#xff1a; 前置源码&#xff1a; Python打造动态绘图系统&#x1f4c8;一 三维绘图系统 &#x1f4c8;二 多图绘制系统&#x1f4c8;三 坐 标 轴 定 制&#x1f4c8;四 定制绘图风格 &#x1f4c8;五 数据生成…

CCC数字钥匙设计【NFC】 --车主配对流程Phase2

1、车主配对流程介绍 车主配对可以通过车内NFC进行&#xff0c;若支持UWB测距&#xff0c;也可以通过蓝牙/UWB进行。通过NFC进行车主配对总共有5个Phase。本文档主要对Phase2进行介绍。 1) Phase0&#xff1a;准备阶段&#xff1b; 2) Phase1&#xff1a;启动流程&#xff1…

如何生成你的打字速度证书?

趁着十一国庆之际&#xff0c;开发完成了打字侠的速度测试功能。我自己的打字速度约为56字/分钟&#xff0c;算是盲打中速度比较快的人咯。下面是我的打字荣誉证书呢。 你也想来试一试吗&#xff1f; 测试地址&#xff1a;https://hellotyping.com/speed-test

本地部署 Qwen-Agent

本地部署 Qwen-Agent 1. Qwen-Agent 概述2. Github 地址3. 创建虚拟环境4. 安装 flash-attention5. 部署 Qwen 模型服务6. 部署 Qwen-Agent7. 浏览器访问 Qwen Agent8. 安装浏览器助手 1. Qwen-Agent 概述 Qwen-Agent 是一个代码框架&#xff0c;用于发掘开源通义千问模型&…

拯救者R9000P 2023测试,从入门到发烧(多图预警)

20231003 By wdhuag 目录 前言&#xff1a; 开箱检查注意事项&#xff1a; 后期升级拆机参考&#xff1a; 机器配置&#xff1a; 总结&#xff1a; 开箱&#xff1a; BIOS画面&#xff1a; 备份原系统&#xff1a; 详细参数&#xff1a; 跑分&#xff1a; 安装Wind…

jenkins利用插件Active Choices Plug-in达到联动显示或隐藏参数,且参数值可修改

1. 添加组件 Active Choices Plug-in 如jenkins无法联网,可在以下两个地址中下载插件,然后放到/home/jenkins/.jenkins/plugin下面重启jenkins即可 Active Choices Active Choices | Jenkins plugin 2. 效果如下: sharding为空时,sharding_info和copy_info不显示 shard…

ElementPlus弹出消息提示框

request.post(api/furn/updata, this.form).then(res > {console.log(res);if (res.code200){//弹出消息框this.$message({message: 修改成功,type: success,});}else if (res.code 400) {//弹出消息框this.$message.error(修改失败);}//关闭对话框this.dialogFormVisible …

安装OpenPCDet跑通PointPillars

前言 刚开始接触OpenPCDet这个库&#xff0c;配置环境好久都不成功&#xff0c;后面看到这篇博文 【OpenPCDet】Kitti数据集下训练PointPillars并评估&可视化 给我提供了思路&#xff0c;本文主要记录一下安装过程中出现的错误 环境 ubuntu20.04 CUDA Version: 11.5 安…

语义分割 Semantic Segmentation

之前了解过语义分割的内容&#xff0c;感觉可以做好多东西&#xff0c;然后就抽空学习了一下&#xff0c;这里记录一下方便以后查阅&#xff0c;这篇文章可能也会随着学习的深入不断更新。 语义分割 Semantic Segmentation 一些基本概念几种语义分割算法Fully Convolutional Ne…

华硕X555YI, Win11下无法调节屏幕亮度

翻出一个旧电脑华硕X555YI&#xff0c;装Win11玩&#xff0c;已经估计到会有一些问题。 果然&#xff0c;装完之后&#xff0c;发现屏幕无法调节亮度。试了网上的一些方法&#xff0c;比如修改注册表等&#xff0c;无效。 估计是显卡比较老&#xff0c;哪里没兼容。然后用驱动…

iOS---生成证书文件的时候无法选择导出.p12文件

解决办法&#xff1a; 左栏有两个分类&#xff0c;一个钥匙串&#xff0c;一个是种类&#xff0c;要选择种类里面的【我的证书】或【证书】进行导出。选择【系统】找到【我的证书】这样导出不了"个人信息交换(.p12)" 正确做法是&#xff1a;选择【登录】找到【我的…

尚硅谷ES学习笔记一

文章目录 第1章 Elasticsearch概述01-开篇02-技术选型Elasticsearch 是什么 全文搜索引擎Elasticsearch 应用案例03-教学大纲04-入门-环境准备05-入门-RESTful & JSON06-入门-Postman客户端工具07-入门-倒排索引08-入门-HTTP-索引-创建09-入门-HTTP-索引-查询 & 删除10…

可观测平台如何存储时序曲线?滴滴实践全历程分享

滴滴的时序曲线量从 2017 年 到 2023 年增长了几十倍。整个过程中我们不断地调整和改进以应对这样的增长。例如时序数据库的选型从最初的 InfluxDB&#xff0c;到 RRDtool&#xff0c;又开发了内存 TSDB 分担查询压力&#xff0c;再到 2020 年开始使用 VictoriaMetrics。载体也…

2023年【高压电工】证考试及高压电工复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 高压电工证考试根据新高压电工考试大纲要求&#xff0c;安全生产模拟考试一点通将高压电工模拟考试试题进行汇编&#xff0c;组成一套高压电工全真模拟考试试题&#xff0c;学员可通过高压电工复审模拟考试全真模拟&a…

【PWN · ret2shellcode | “jmp esp“】[i春秋]ret2shellcode

当溢出长度不足时&#xff0c;如何将shellcode放入padding位值&#xff0c;并执行呢&#xff1f; 目录 前言 一、题目重述 ​编辑 二、题目分析 1.存在溢出 2.如何跳转 3.payload构想 4.Addr(jmp esp) 5.指令序列 三、exp 总 前言 回顾ret2shellcode发现还有很多基础的技巧没…

安装JDK(Java SE Development Kit)超详细教程

文章时间 &#xff1a; 2023-10-04 1. 下载地址 直接去下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/ &#xff08;需要翻墙&#xff0c;不想翻墙或者不想注册oracel账号的&#xff0c;直接去我的阿里云盘&#xff09; 阿里云盘&#xff1a;http…

2023年【熔化焊接与热切割】考试资料及熔化焊接与热切割复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年熔化焊接与热切割考试资料为正在备考熔化焊接与热切割操作证的学员准备的理论考试专题&#xff0c;每个月更新的熔化焊接与热切割复审模拟考试祝您顺利通过熔化焊接与热切割考试。 1、【单选题】 湿法水下焊接时…