尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Shell中的变量

Shell中的变量
📅 发布时间:2026/7/29 2:15:26

1、变量命名

  • 可以使用数字,字母,和下划线给变量命名
  • 不能用数字开头
  • 如果给同一个变量赋值多次,最后一次赋值会覆盖之前的值
var1=value#普通赋值方法var2='value'var3="hello world"#当变量的值(字符串)中包含任何空白符时,加双引号var4="$(ls-l)"#将命令结果赋值给变量

注意:=前后不要有空格(区别于其他语言,Shell对空格检查严格)

2、变量的使用
使用一个定义过的变量,只要在变量名前面加美元符号$即可,如:

str="Hello"echo$strecho${str}

当需要标明变量的边界时,需要加上花括号。

skill="Java"echo"I am good at${skill}Script

如上,如果不加花括号会被认为是$skillScript,导致出现问题

3、变量作用域

  1. 局部变量
    局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  2. 环境变量
    所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  3. shell变量
    shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

4、内置变量
shell内置的环境变量是所有的shell程序都可以使用的变量,环境变量会影响所有的脚本的执行结果。

变量说明
PATH命令的搜索路径,以冒号作为分隔符
HOME用户的家目录的路径,是cd命令的默认参数
COLUMNS命令行编辑模式下可使用命令的长度
HISTFILE命令历史的文件路径
HISTFILESIZE命令历史中包含的最大行数
HISTSIZEhistory命令输出的记录数
LOGNAME当前用户的名字
SHELL当前使用的shell
PWD当前的工作目录

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过$𝑛的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数等。注意,若参数数量超过10,需要使用${10}的形式获取。

参数解释
$#命令行的参数的个数
$0当前脚本的名称,$2表示脚本的第二个参数……
$*以“参数1 参数2 参数3”的形式返回所有参数的值
$@以“参数1”“参数2”“参数3”的形式返回所有参数的值
$$返回本程序的进程ID(PID)
$?返回本程序的结束状态码

5、取消变量

unsetxxx#将之前定义的变量xxx删除,后面将不在有效。

如果直接关闭终端进程,也可以达到取消变量的效果。

6、变量扩展语法

形式说明
${var}变量本来的值
${var:-word}如果变量 var 为空或已被删除(unset),那么返回 word,但不改变 var 的值。
${var:=word}如果变量 var 为空或已被删除(unset),那么返回 word,并将 var 的值设置为 word。
${var:?message}如果变量 var 为空或已被删除(unset),那么将消息 message 送到标准错误输出,可以用来检测变量 var 是否可以被正常赋值。如果在Shell脚本中发生了这个替换,那么脚本将停止运行。
${var:+word}如果变量 var 被定义,那么返回 word,但不改变 var 的值。

7、字符串操作
计算长度

string="abcd"echo${#string}#输出 4

提取子串

string="alibaba is a great company"echo${string:1:4}#输出liba

拼接字符串

your_name="qinjx"greeting="hello, "$your_name" !"greeting_1="hello,${your_name}!"echo$greeting$greeting_1

查找字符串

string="alibaba is a great company"echo`exprindex"$string"is`
text="read phy addr: 0x1f reg: 0x1f value : 0x0"str="value : "value=${text#*$str}#打印value的值echo"$value"0x0

替换字符

string="123123"echo${string/3/0}#用0替换第一个遇见的3echo${string//3/0}#用0替换串中所有3

相关新闻

  • STM32与A5000加密芯片的物联网安全方案设计
  • AI工作流与关键词采集API在亚马逊SEO中的实践
  • 3个技巧让Android弹窗开发变得简单:BasePopup库实用指南

最新新闻

  • 2026年7月双月湾抖音团购运营/惠东海边本地生活代运营公司如何选_惠州市乘数科技网络有限责任公司 - 行业平台推荐
  • 2026年7月热门的餐饮运营培训公司哪个靠谱,中小餐饮门店/餐饮创业/餐饮/餐饮小吃/餐饮爆店,餐饮培训机构怎么选择 - 品牌推荐师
  • 2026本地AI与代码工具开源生态及实战指南
  • 【免费数据】1901-2024年1km分辨率逐月最低气温栅格数据(全国)
  • 导电墨水笔电路制作:从原理到实践,手绘电子原型全解析
  • 物联网安全连接:A5000加密模块与PIC18F26K42的实战应用

日新闻

  • 金融舆情监测系统:多语言情感分析与实时可视化技术解析
  • QT C++调用Python异常处理:PyBind11实战与跨语言编程指南
  • A-47双麦回音消除模块:主次麦空间分布与差分连接对ENC性能的影响

周新闻

  • 大连理工大学与东京大学联手打造的“主动型AI助手“
  • 170.2026年国家级科研瓶颈:超精密单点金刚石切削(SPDT)光学表面生成
  • SongBloom:革命性歌曲生成框架深度解析——如何通过交织自回归与扩散模型创作完整音乐

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号