news 2026/6/3 12:42:06

Shell变量详解——自定义变量、环境变量、位置变量、特殊变量(全集)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Shell变量详解——自定义变量、环境变量、位置变量、特殊变量(全集)

一、前言

变量是 Shell 编程的基础,所有判断、循环、函数、脚本逻辑都依赖变量。Shell 变量分为四大类:自定义变量、环境变量、位置变量、特殊内置变量。本篇全覆盖定义、赋值、取值、规则、实战场景、面试考点。


二、自定义变量(普通变量)

1. 定义规则(必考)

  • 变量名由字母、数字、下划线组成,不能以数字开头

  • 等号两边绝对不能有空格

  • 字符串默认不用引号,含空格必须加双引号

  • 变量默认都是字符串类型,无严格数据类型

2. 定义与调用

#!/bin/bash name="运维笔记" age=18 # 调用变量 echo $name echo ${age}

3. 变量赋值方式

# 1. 直接赋值 a=100 # 2. 命令结果赋值(重点) time=$(date +%H:%M:%S) echo $time # 3. 交互式输入赋值 read -p "请输入内容:" input echo "你输入的是:$input"

4. 变量销毁

unset name

三、环境变量(全局变量)

普通变量仅当前 Shell 有效;环境变量全局有效,子 Shell 也能继承,常用于系统配置、路径、脚本全局参数。

1. 定义环境变量

# 临时环境变量(当前终端有效) export SCHOOL="LinuxStudy"

2. 永久环境变量

  • 用户级:~/.bashrc~/.bash_profile

  • 系统级:/etc/profile

写入 export 配置后,执行source /etc/profile生效。

3. 常见系统环境变量

echo $PATH # 系统命令路径 echo $USER # 当前用户 echo $HOME # 家目录 echo $PWD # 当前路径 echo $SHELL # 默认解释器

四、位置变量(脚本传参核心)

执行脚本时,跟在脚本后的参数,自动接收,无需定义,多用于脚本传参。

位置变量参数表

  • $0:脚本本身名称

  • $1 $2 ... $9:第1~9个参数

  • ${10}:第10个参数(必须大括号)

  • $#:参数总个数

  • $*:所有参数整体作为一个字符串

  • $@:所有参数独立列表(循环首选)

实战案例 test.sh

#!/bin/bash echo "脚本名:$0" echo "第一个参数:$1" echo "参数总数:$#" echo "所有参数:$*"

执行:bash test.sh 11 22 33


五、特殊变量面试考点($* 和 $@ 区别)

  • $*:将所有参数看成一个整体

  • $@:将所有参数看成独立列表

  • for循环遍历参数,永远用 $@


六、变量总结

  1. 自定义变量:局部、当前Shell、临时使用

  2. 环境变量:全局、子Shell继承、系统配置

  3. 位置变量:脚本传参、自动化脚本必备

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/3 12:42:05

CodeFormer终极指南:15分钟掌握AI人脸修复的完整流程

CodeFormer终极指南:15分钟掌握AI人脸修复的完整流程 【免费下载链接】CodeFormer [NeurIPS 2022] Towards Robust Blind Face Restoration with Codebook Lookup Transformer 项目地址: https://gitcode.com/gh_mirrors/co/CodeFormer 你是否曾翻看老照片&a…

作者头像 李华
网站建设 2026/6/3 12:40:10

基于TL074与光敏电阻的高保真侧链压缩效果器DIY全攻略

1. 项目概述与核心思路如果你玩过电子音乐制作,或者只是喜欢在车里把音响开大听那些节奏感强烈的舞曲,那你一定对那种“砰砰”的抽吸感不陌生——每当沉重的底鼓敲下,背景的音乐就像被瞬间吸走了一部分音量,紧接着又缓缓恢复。这种…

作者头像 李华
网站建设 2026/6/3 12:37:57

协作式网络架构实战:从带宽共享到分布式系统设计

1. 项目概述:从“独享”到“共享”的网络带宽革命“Cooperative Networking: Share the Bandwidth”,这个标题直译过来是“协作式网络:共享带宽”。乍一看,它可能像是一个简单的网络共享概念,但在我十多年的网络工程和…

作者头像 李华
网站建设 2026/6/3 12:36:50

Arduino移植Flappy Bird:从游戏逻辑到硬件交互的嵌入式开发实践

1. 项目概述:当经典游戏遇上微控制器几年前,一款名为Flappy Bird的简单手游风靡全球,其核心玩法——通过点击屏幕控制小鸟穿越管道——看似简单,却对玩家的节奏感和反应力提出了挑战。作为一名嵌入式开发爱好者,我一直…

作者头像 李华