Bash 变量:export、位置参数与默认值展开验证
1. 用途介绍
Bash 变量保存脚本状态、参数和子进程环境。正确区分 Shell 变量、export 环境变量和函数 local,可避免脚本读取不到配置、参数被拆分或默认值误用。
2. 准备运行环境
Linux Bash,普通测试账号即可。无需 root、网络或服务端。不要直接打印生产环境 env/set,它们可能包含令牌和凭据。
3. 相关知识与注意点
• name=value 的等号两边不能有空格;value 内可以含空格,但需引号。
• export 使以后启动的子进程继承变量;子进程修改不会自动回写父进程。
• local 限定函数作用域,不等同于位置参数。
• "@" 保留各参数边界;"*" 通常按 IFS 首字符合并。
• $? 是上一条命令退出状态,0 通常成功,非0含义由命令定义,不一定是执行故障。
• $$ 在 Bash 子 Shell 环境中可能仍反映原 Shell,BASHPID 可查看当前 Bash 进程。
• {x:-word} 对未设置或空值生效;{x-word} 只对未设置生效。:= 还会赋值,:? 可报错退出非交互 Shell。
4. 实验步骤
bash
name='hello world'
printf '%s\n' "$name"
export DEMO_VALUE='child value'
bash -c 'printf "%s\n" "$DEMO_VALUE"'
unset DEMO_VALUE
printf '%s\n' "${DEMO_VALUE:-fallback}"
位置参数示例保存为 args.sh:
bash
#!/usr/bin/env bash
printf 'count=%s\n' "$#"
for arg in "$@"; do
printf '<%s>\n' "$arg"
done
bash
bash -n args.sh
bash args.sh 'a b' c
预期 count=2,分别输出 <a b> 和 <c>,不是三个参数。
5. 原实验截图















6. 验证命令
用 bash -n 检查语法,分别以未设置、空值和非空值测试默认值展开。用 declare -p DEMO_VALUE 查看单个测试变量属性,避免导出整个真实环境;执行子进程验证继承,返回父 Shell 后复查原值。上文输出仅为确定输入的预期结果,未冒充本机Linux实测。