变量常用命令

📝 Shell变量常用命令大全

一、变量操作核心命令

命令语法作用示例说明
赋值变量=值创建/修改变量name="John"等号两边不能有空格
引用$变量获取变量值echo $name简单引用
引用${变量}安全引用echo ${name}推荐,可边界识别
显示echo $变量输出变量echo $HOME显示变量内容
显示printf格式化输出printf "%s\n" $name更强大
删除unset 变量删除变量unset name变量消失
只读readonly 变量设为只读readonly PI=3.14不能修改

二、变量类型声明

命令选项作用示例说明
declare-i整数变量declare -i num=10只能存整数
-r只读变量declare -r version="1.0"不能修改
-l自动小写declare -l lower="HELLO"值转小写
-u自动大写declare -u upper="world"值转大写
-a数组变量declare -a arr=(1 2 3)索引数组
-A关联数组declare -A map=([k]=v)键值对
-x环境变量declare -x PATH同export
-p显示属性declare -p name显示变量详情
typeset同上同declaretypeset -i num=5兼容ksh
local函数局部local temp="test"只能在函数内
export环境变量export PATH=$PATH:/usr子进程继承
readonly只读readonly DEBUG=true同declare -r

三、变量查看命令

命令作用示例说明
set显示所有变量set | grep USER显示所有变量和函数
env显示环境变量env | grep PATH只显示环境变量
printenv显示环境变量printenv HOME可指定变量
declare显示所有变量declare -p显示变量和属性
typeset同declaretypeset -p同上
compgen -v列出变量名compgen -v只显示名字
echo显示单个echo $PWD最常用

四、变量测试判断

语法作用示例说明
test -z是否为空test -z "$var"空返回真
test -n是否非空test -n "$var"非空返回真
[ -z ]test别名[ -z "$var" ]需空格
[[ -z ]]增强测试[[ -z $var ]]可不用引号
${var:-def}默认值echo ${name:-匿名}空则用默认
${var:=def}赋值默认: ${age:=18}空则赋值
${var:?err}检查存在: ${JAVA_HOME:?}未定义报错
${var:+val}存在替换echo ${name:+有值}存在则替换

五、字符串操作

语法作用示例结果
${#var}字符串长度name="Tom"; echo ${#name}3
${var:start}从start截取str="Hello"; echo ${str:2}llo
${var:start:len}截取指定长度str="Hello"; echo ${str:1:3}ell
${var#pattern}删最短前缀file="a.b.c"; echo ${file#*.}b.c
${var##pattern}删最长前缀file="a.b.c"; echo ${file##*.}c
${var%pattern}删最短后缀file="a.b.c"; echo ${file%.*}a.b
${var%%pattern}删最长后缀file="a.b.c"; echo ${file%%.*}a
${var/old/new}替换第一个str="a b a"; echo ${str/a/x}x b a
${var//old/new}替换全部str="a b a"; echo ${str//a/x}x b x
${var/#old/new}开头替换str="abc"; echo ${str/#a/x}xbc
${var/%old/new}结尾替换str="abc"; echo ${str/%c/x}abx
${var^^}转大写str="hello"; echo ${str^^}HELLO
${var,,}转小写str="HELLO"; echo ${str,,}hello
${var^}首字母大写str="hello"; echo ${var^}Hello
${var,}首字母小写str="HELLO"; echo ${var,}hELLO

六、算术运算

语法作用示例结果
$(( ))整数运算echo $((5+3))8
let算术运算let a=5+3; echo $a8
expr表达式计算expr 5 + 38
bc浮点运算echo "5.5+3.2" | bc8.7

七、数组操作

语法作用示例说明
arr=(v1 v2)创建数组fruits=(apple orange)空格分隔
${arr[0]}取元素echo ${fruits[0]}下标从0开始
${arr[@]}取所有echo ${fruits[@]}所有元素
${#arr[@]}数组长度echo ${#fruits[@]}元素个数
${!arr[@]}所有下标echo ${!fruits[@]}索引列表
unset arr[0]删除元素unset fruits[0]删除指定
unset arr删除数组unset fruits整个删除
arr+=(v3)追加元素fruits+=("grape")末尾添加

八、位置参数

语法作用示例说明
$0脚本名echo $0当前脚本
$1-$9第1-9个参数echo $1 $2位置参数
${10}第10个参数echo ${10}10以上要{}
$#参数个数echo $#参数总数
$@所有参数for i in "$@"; do每个作为独立词
$*所有参数for i in "$*"; do整体一个字符串
shift参数左移shift 2丢弃前2个参数

九、特殊变量

变量作用示例说明
$$当前PIDecho $$脚本进程ID
$?退出码echo $?上命令执行结果
$!后台PIDecho $!最后后台进程
$_上命令最后参数echo $_快捷使用
$-当前选项echo $-Shell选项
$IFS分隔符echo "$IFS"默认空格/Tab/换行

十、实用组合

# 1. 变量存在检查
[ -z "$JAVA_HOME" ] && echo "JAVA_HOME未设置"

# 2. 默认值赋值
: ${PORT:=8080}

# 3. 变量导出
export PATH="$PATH:/usr/local/bin"

# 4. 只读常量
readonly MAX_CONNECTIONS=1000

# 5. 临时变量(命令执行前)
DEBUG=true ./script.sh

# 6. 变量间接引用
var_name="HOME"
echo ${!var_name}  # 输出家目录

# 7. 命令结果赋值
files=$(ls -la)

# 8. 多变量赋值
read a b c <<< "1 2 3"

核心记忆

类别最常用命令
赋值var=value
引用$var ${var}
显示echo $var
删除unset var
只读readonly var
环境export var
局部local var
测试[ -z "$var" ]
默认${var:-default}
长度${#var}
切片${var:0:5}
替换${var/old/new}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注