linux shell变量无需声明类型,赋值等号无空格,引用用$name或${name};位置参数$0为命令名,$1-$9为前九参数,${10}起需大括号,$#为参数个数,"$@"保持参数独立,$?为上条命令退出状态。

Linux Shell 中变量和参数是脚本编写与命令行操作的基础,掌握它们能让你更灵活地处理数据、控制流程、复用命令。
变量定义与引用
Shell 变量无需声明类型,赋值时等号两侧不能有空格。变量名区分大小写,建议使用小写字母加下划线(如 user_name)避免与系统变量冲突。
- 定义变量:name="Alice"(注意:不能写成 name = "Alice")
- 引用变量:$name 或 ${name}(后者在变量后紧跟字母或符号时必须用大括号,如 echo ${name}123)
- 查看变量值:echo $PATH;清空变量:unset name
- 只读变量:readonly age=25,之后无法修改或 unset
位置参数与特殊变量
运行脚本或命令时传入的参数会自动存入位置参数,
运行脚本或命令时传入的参数会自动存入位置参数,$0 表示命令本身,$1 到 $9 是前九个参数,${10} 起需用大括号。
表示命令本身, 到 是前九个参数, 起需用大括号。
网趣购物系统静态版支持网站一键静态生成,采用动态进度条模式生成静态,生成过程更加清晰明确,商品管理上增加淘宝数据包导入功能,与淘宝数据同步更新!采用领先的AJAX+XML相融技术,速度更快更高效!系统进行了大量的实用性更新,如优化核心算法、增加商品图片批量上传、谷歌地图浏览插入等,静态版独特的生成算法技术使静态生成过程可随意掌控,从而可以大大减轻服务器的负担,结合多种强大的SEO优化方式于一体,使
- $0:当前执行的脚本或命令名(如 ./test.sh)
- $1, $2, …:依次对应第一个、第二个…命令行参数
- $#:参数总个数;$* 和 $@ 都表示所有参数,但引号包裹时行为不同:"$*" 合并为一个字符串,"$@" 保持各参数独立(推荐遍历用)
- $?:上一条命令的退出状态(0 表示成功,非 0 表示失败)
- $!:最近后台进程 PID
变量扩展与常见操作
Shell 支持多种参数扩展语法,用于默认值、截取、替换等,无需调用外部命令。
- 提供默认值:${name:-"Unknown"}(name 未设置或为空时返回 "Unknown");${name:="Unknown"} 还会把值赋给 name
- 字符串截取:${path#/} 去掉开头第一个 /;${path##*/} 取最后一个 / 后的部分(类似 basename);${path%/*} 去掉末尾 / 及之后(类似 dirname)
- 模式替换:${file/.txt/.log} 把第一个 .txt 替换为 .log;${file// /_} 全局将空格替换成下划线
- 获取长度:${#str} 返回字符串 str 的字符数
环境变量与作用域
普通变量只在当前 Shell 进程有效;用 export 导出后成为环境变量,子进程可继承。
- 导出变量:export PATH 或 export JAVA_HOME="/opt/java"
- 查看所有环境变量:env 或 printenv;查看当前 Shell 所有变量(含局部):set
- 临时修改 PATH:export PATH="$PATH:/my/bin";永久生效需写入 ~/.bashrc 或 /etc/profile(注意权限和生效方式)
- 子 Shell 中无法修改父 Shell 的变量(除非用 source 执行脚本)









