留意shell变量作用域

Shell中脚本变量和函数变量的作用域       在shell中定义函数可以使代码模块化,便于复用代码。不过脚本本身的变量和函数的变量的作用域问题可能令你费解,在这里梳理一下这个问题。(1)Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止。例1:脚本变量的作用域#!/bin/bash#define the function ltx_funcltx 阅读详情

shell变量的作用域大部分都是全局的。这点非常不好。经常会造成意想不到的后果。所以强烈建议在定义每一个变量时都先声明为local的。

举例如下:

f1.sh:

function f1() {
        line="f1,hhaha"
}

f2.sh

function f2() {
        local line=""
        read line
        echo $line
}


test.sh

#! /bin/sh
. f1.sh 
. f2.sh
line="main"
f1
echo $line
f2
echo $line



然后运行:sh -x test.sh  

输出如下:

+ . f1.sh
+ . f2.sh
+ line=main
+ f1
+ line=f1,hhaha
+ echo f1,hhaha
f1,hhaha
+ f2
+ local line=
+ read line
hey 
+ echo hey
hey
+ echo f1,hhaha

f1,hhaha



可见,f1中的line把原来的line值覆盖了。而f2中使用了local就不会产生这种情况。

还有,一些变量特别容易忽略,如 read line。此时line是一个全局变量。必须在开始声明

local line

再调用read line。

深入理解Shell变量的作用域与导出机制 本文探讨了Shell编程中变量的作用域和导出规则。通过实例演示了子shell对变量的作用域限制,以及导出变量如何在子shell和父shell间传递。同时,详细解释了环境变量PATH和HOME的使用,以及如何通过修改PATH环境变量来控制命令搜索顺序。 阅读详情

相关推荐

深入理解Shell中的变量作用域与导出

本文探讨了Shell编程中的变量作用域问题,特别是子shell与父shell间变量的传递关系。通过分析导出变量的行为,揭示了在子shell中对变量的修改不会影响父shell中的同名变量。同时,介绍了如何通过`export`命令导出变量,并举例说明了变量在不同shell间的作用域和传递机制。

weixin_42560991的博客 739

Shell变量作用域

全局变量、局部变量、环境变量

荣耀之路 3315

深入理解Shell环境与变量作用域

本篇博客详细探讨了Shell环境的基本概念以及变量的作用域和导出机制。首先介绍了登录Shell环境及其重要性,接着通过实例演示了局部变量和导出变量的区别,以及如何在子shell中处理这些变量。文章还深入解释了子shell与父shell变量作用域的隔离,以及如何使用export命令将变量导出给子shell。最后,通过实际案例分析了子shell修改导出变量值后的行为,帮助读者更好地理解和利用Shell环境。

weixin_32312889的博客 410

Shell 变量的作用域详解

at是一次性计划任务,是安排某个任务在指定的时间允许一次执行。如果要周期执行就需要crontab了。 最重要的就是crontab里面时间的书写格式了 分钟 小时 天 月 星期 脚本/命令 使用crontab -e编写计划任务只要将这几个部分填写好就可以了。 把具体的时间值填上,不知道的添加上*就可以了。 比如对一个数据库每天凌晨四点做一个备份,那么时间格式怎么写?

小楼一夜听春雨,深巷明朝卖杏花 1156

三维重建之条纹投影结构光(三)——相位展开优化与多频外差实践

本文深入探讨了三维重建中条纹投影结构光技术的核心环节——相位展开优化。针对传统路径跟踪法存在的误差传播与路径依赖问题,重点解析了多频外差法的原理与优势,并通过详细的C++代码实践,展示了如何利用三频外差法实现鲁棒、高精度的相位展开,从而获得连续的绝对相位图,为后续三维点云生成奠定坚实基础。

weixin_29074295的博客 531

vCenter6.7证书过期导致503报错的全面修复指南:从STS证书更新到SSL信任修复

本文详细解析了VMware vCenter 6.7因STS证书过期导致503服务不可用错误的根本原因,并提供了从诊断、更新STS证书到修复SSL信任链的完整解决方案。通过命令行工具检查证书状态,使用官方脚本更新过期STS证书,并利用lsdoctor工具修复深层SSL信任问题,最终指导用户使用certificate-manager彻底重置所有证书,帮助管理员快速恢复vCenter服务。

pz890123的博客 1294

Linux学习 -- Shell变量的作用域

Linux学习 -- Shell变量的作用域,包括本地变量,环境变量,局部变量

qq_50929489的博客 1089

国际项目投标那些事(三)海外项目招标文件的组成

以一个实际的项目作为例子,是我2020年初投的一个东南亚国家的水厂的竞争性投标。这个投标的招标基于FIDIC yellow book (Design and Build) 合同模板。 海外项目的招标一般是有专门的咨询公司(consulting engineer)写招标文件,有的咨询公司非常专业,对于技术、合同、业绩的要求非常细致。 我这个项目的招标文件共5册 400多页(全英文),附件26册将...

WTSolutions的博客 2004

Shell 变量的作用域

Shell 变量的作用域(Scope),就是 Shell 变量的有效范围(可以使用的范围)。 在不同的作用域中,同名的变量不会相互干涉,就好像 A 班有个叫小明的同学,B 班也有个叫小明的同学,虽然他们都叫小明(对应于变量名),但是由于所在的班级(对应于作用域)不同,所以不会造成混乱。但是如果同一个班级中有两个叫小明的同学,就必须用类似于“大小明”、“小小明”这样的命名来区分他们。 Shell 变量的作用域可以分为三种: 有的变量只能在函数内部使用,这叫做局部变量(local variable); 有的

五山口老法师 2742

EVE-NG 新增 qcow2 镜像教程

本文介绍了如何在 EVE-NG 网络仿真平台中添加 QCOW2 镜像并配置 YML 文件。首先,用户需要了解 EVE-NG 的目录结构,上传并重命名 QCOW2 镜像,然后设置文件权限并刷新界面以识别设备。接着,讲解了 YML 文件的作用,它用于定义设备的CPU、内存、网卡等参数,并给出了配置示例。若有多个设备版本,可以通过复制并重命名 YML 文件使其独立显示。最后,通过检查 QEMU 进程和日志验证 YML 配置是否生效。总结部分强调了 EVE-NG 的自动识别机制以及独立管理设备版本的方式。

qq_41862216的博客 3075

Revit二次开发——不启动Revit,做rvt文件数据导出

Revit二次开发——不启动Revit,做rvt文件数据导出Node.js部分调用C#端供外部调用的dllC#部分调用RevitNet.dll,做数据导出exe做外部调用dll总结功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 N

Y.Jerome的专栏 4111

Shell变量作用范围

什么是变量的作用范围?变量在Shell脚本中的有效范围或可使用的范围, 通过从函数->脚本->进程内->跨进程->跨终端->跨用户不同场景中变量表现,引出变量的作用范围,使用local修饰变量使变量的作用范围控制在函数内,在脚本中定义变量可以在函数中共享,通过使用export修饰变量使其能在进程间传递,实现进程间共享变量,扩大变量作用范围,另外修改配置文件~/.bashrc和/etc/bashrc能使变量在多个终端和用户间共享

Zephyrzh的博客,关注【蚕师】成为大厂技术人 1836

清洁机器人之屏幕(中,大LCD)方案--ITE 联阳986x系列 soc显控芯片介绍

清洁机器人之屏幕(中,大LCD)方案--ITE 联阳986x系列 soc显控芯片介绍

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 2666

Shell脚本学习笔记(3)——函数的调用以及变量的作用域

Shell是用户和Linux内核沟通的桥梁,所以学习Shell是很有必要的。文章主要分享了一些Shell的基础知识,以及Shell函数如何定义,调用。以及使用注意事项!同时文章末尾也分享了学习Shell的电子书。很适合新手入门进行学习。

万里羊的博客 7654

Android OTA 更新面试题及参考答案

OTA 更新即空中下载技术(Over-the-Air Technology)更新,是一种通过无线网络对移动设备的系统软件或应用程序进行远程更新的技术手段。其原理是设备通过移动网络或 Wi-Fi 连接到服务器,服务器检测设备上可更新的软件版本,当有新的版本时,将更新包发送到设备上。设备接收后,在后台自动完成更新包的下载、安装等一系列操作,无需用户手动下载完整的系统镜像或应用安装包并通过数据线等方式进行安装。例如,当手机厂商推出新的安卓系统版本或安全补丁时,就会通过 OTA 方式推送给用户。

大模型大数据攻城狮的专栏 1629

【Unity的HDRP渲染管线下实现好用的GUI模糊和外描边流光效果_Blur_OutLine_案例分享(内附源码)】

因为没有用到纹理,但介于是UI层,没有MainTeX的时候,会提示报错,所以这里加上了MainTex,最后不在片段着色渲染出来既可。这样UI层级显示正常了,但旋转后的模糊效果,跟背景拼接不上,有很大的偏移。猜测是屏幕UV采样错误导致,只要找到屏幕UV数值,更正过来就可以了,RenderTexture设置一下Size既可,其他的先不管。没有贴图,用Shader实现外描边流光效果。将主相机拖入Render Camera。新建一个RenderTexture。

暴走约伯的博客 1149

Shell编程——Shell变量简介(变量定义与使用、作用域、特殊变量等)

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。

主要记录嵌入式学习与开发过程。 6994

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

linux shell变量作用域,Shell变量的作用域:Shell全局变量、环境变量和局部变量

Shell变量的作用域(Scope),就是Shell变量的有效范围(可以使用的范围)。在不同的作用域中,同名的变量不会相互干涉,就好像A班有个叫小明的同学,B班也有个叫小明的同学,虽然他们都叫小明(对应于变量名),但是由于所在的班级(对应于作用域)不同,所以不会造成混乱。但是如果同一个班级中有两个叫小明的同学,就必须用类似于“大小明”、“小小明”这样的命名来区分他们。Shell变量的作用域可以分为...

weixin_30482027的博客 1354

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【Shell 变量作用域详解】

本文介绍了Shell脚本中的变量作用域,重点对比了全局变量和局部变量的区别。全局变量默认在整个脚本中可访问,但容易被修改;局部变量使用local关键字定义,仅在函数内部有效,更安全规范。通过多个示例展示了两种变量的使用场景,并指出全局变量可能导致的问题。文章建议优先使用局部变量以避免命名冲突和数据污染,提升脚本可维护性。最后提供了函数计算和文件统计的实际案例,演示了局部变量的正确用法。

武帝为此的博客 766

shell循环中变量的作用域问题

最近实现了一个shell脚本,功能简单来说就是从文件中按行读取然后将所有行拼接成一行写入一个文件,关键代码如下 path_all="" cat $1 | while read line do   if [ "$path_all" == "" ];then     path_all=$line   else     path_all=$path_all,$line   fi

Ls4034的专栏 9752

Shell变量定义及作用域

定义变量 Shell 支持以下三种定义变量的方式: 变量名=变量值 变量名=’value’ 通过单引号定义变量;输出变量内容时单引号里面是什么就输出什么,即使内容中有变量和命令也会将它们原样输出。 变量名=”value” 通过双引号定义变量,输出变量时引号里的变量及命令(要反引下)会经过解析后才输出该变量的内容,而不是将引号中的变量或命令原样输出。 注意,赋值号的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样。 variable 是变量名,value 是赋给变量的值。如果 v...

tecoes的博客 1864

mysql shell 作用域_shell变量的作用域

Shell变量的作用域(Scope),就是 Shell 变量的有效范围(可以使用的范围)。Shell 变量的作用域可以分为三种:有的变量只能在函数内部使用,这叫做局部变量(local variable);有的变量可以在当前 Shell 进程中使用,这叫做全局变量(global variable);有的变量可以在子进程中使用,这叫做环境变量(environment variable)。Shell 局...

weixin_39610188的博客 196

Shell - 学习笔记 - 2.2 - Shell变量的作用域:全局变量、环境变量和局部变量

需要强调的是,全局变量的作用范围是当前的 Shell 进程,而不是当前的 Shell 脚本文件,它们是不同的概念。在不同的作用域中,同名的变量不会相互干涉,就好像 A 班有个叫小明的同学,B 班也有个叫小明的同学,虽然他们都叫小明(对应于变量名),但是由于所在的班级(对应于作用域)不同,所以不会造成混乱。通过 export 导出的环境变量只对当前 Shell 进程以及所有的子进程有效,如果最顶层的父进程被关闭了,那么环境变量也就随之消失了,其它的进程也就无法使用了,所以说环境变量也是临时的。

guoqx的专栏 1555

Shell变量的作用域

1.Shell变量的作用域 Shell变量分别为局部变量和全局变量。所以自定义变量默认都是局部变量,环境变量是全局变量 (1)局部变量的作用范围仅限制在其命令行所在的Shell或当前Shell脚本执行过程中 (2)全局变量的作用范围则包括定义该变量的Shell以及其所有子Shell 可以使用export内置命令将局部变量设置为全局变量,export的常用格式为: #将指定的一个或多个局部变量设置为全局变量 export<变量名1>[<变量名2>…] #将指定的一个或多个全局变量设置为

weixin_47165137的博客 955

shell变量的作用域

zz http://hi.baidu.com/ljwan12/blog/item/0e67b4affa83f3c47cd92adc.html while read line do     str[$i]=$line1     echo $i     echo ${str[i]}     let i=i+1 done len=${#str[@]} echo $len

orzorz的专栏 863
上一篇: 新浪微博应用开发者协议真坑爹啊!
下一篇: JavaScript Module Pattern: In-Depth
flybywind
博客等级 码龄19年 18粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值