Linux Shell变量默认局部、无类型,赋值等号两侧不可有空格,引用需加$;export导出为环境变量供子进程继承,函数内用local声明局部变量,双引号内可展开变量而单引号不可。

Linux Shell 中的变量用法看似简单,但作用域和赋值规则常被误解,尤其在脚本调试时容易出错。关键在于:变量默认是局部的、无类型、赋值不加空格、引用需加 $ 符号,且子 shell 无法修改父 shell 的变量。
Shell 变量赋值时,等号两侧**不能有空格**,否则会被解释为命令执行:
name = "Alice" → 报错:name: command not found
name="Alice" 或 name=Alice(无空格、无引号也可,但含空格或特殊字符必须加引号)user1 合法,1user 非法$((...)) 或 let 显式处理默认定义的变量只在当前 shell 进程中有效;要让子进程(如执行的脚本、管道中的命令)也能访问,必须用 export 导出为环境变量:
PATH="/usr/local/bin:$PATH" → 修改当前 shell 的 PATH,但子进程看不到export PATH → 将 PATH 导出,后续启动的命令、子 shell 均继承该值export TMPDIR="/tmp/myapp" → 定义并导出一步完成(echo $name))可读取父 shell 的变量,但修改后不影响父 shell —— 这是 fork 机制决定的隔离性在函数中直接赋值的变量,默认仍是全局的。如需真正局部化,必须显式使用 local 关键字(仅 Bash/Zsh 支持):
myfunc() { count=10; echo $count; } → 函数外也能访问 $count
myfunc() { local count=10; echo $count; } → count 仅在函数内有效,退出即销毁local 必须在函数内部第一层使用,不能在子命令或条件分支中单独声明$,何时不加?变量定义(赋值)时不加 $,引用(取值)时必须加;但某些上下文会自动展开,容易混淆:
user="bob"(不加 $)echo $user 或 echo "${user}"(推荐加花括号,避免歧义如 ${user}file)msg="Hello $user" → 正确;单引号中则原样输出:'Hello $user' → 输出字面量now=$(date),等号右边是命令,左边变量名不加 $
以上就是LinuxShell变量如何使用_作用域与赋值规则解析【教学】的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号