
linux Shell 变量本质是字符串容器,赋值即存文本,使用时加 $ 引用。核心就三点:怎么设、怎么用、怎么管。
变量怎么正确设置
赋值格式固定:变量名=值,等号两边绝对不能有空格,否则 shell 会当成命令执行而报错。
- 变量名只能含字母、数字、下划线,且必须以字母或下划线开头(如
user_name合法,1user不合法) - 变量值含空格或特殊字符,必须用双引号
" "或单引号' '包裹(如msg="hello world") - 不加引号也可以,但仅限值中不含空格、通配符(
*、?)、$、反引号等,否则可能被错误解析
变量怎么安全引用
取值统一用 $变量名 或更清晰的 ${变量名}。花括号不是可选,而是必要——尤其当变量名后紧接其他字符时。
- 例如:
name=Tom,写echo "$name_is_here"会找不到变量;应写echo "${name}_is_here" - 双引号内支持变量展开(
"Hello $name"→Hello Tom),单引号则原样输出('Hello $name'→Hello $name) - 命令替换可用
$(命令)或反引号,结果可直接赋给变量(如count=$(ls | wc -l))
变量怎么控制作用范围
普通变量默认只在当前 shell 进程有效;要让子进程也能用,得导出为环境变量。
- 导出方式:
export var=value或先赋值再export VAR - 查看所有变量用
set,只看环境变量用env或printenv - 设为只读:
readonly VAR或declare -r VAR,之后无法重新赋值 - 删除变量:
unset VAR(注意不带$)
常见误操作提醒
很多问题其实就卡在几个细节上:
-
VAR = value(中间有空格)→ 报错:command not found -
echo $PATH/bin→ 可能误读成变量PATH/bin;应写echo "${PATH}/bin" - 把数字当整数运算?Shell 默认全字符串,需显式声明:
declare -i num=5,否则num=2+3不会算出 5,而是存下字面量2+3