--- title: "09-默认变量" created: 2025-11-25 tags: - 项目 aliases: - 默认变量 --- # 默认变量 ## 文件参数变量 在执行shell脚本时,可以向脚本传递参数。 $1是第一个参数,$2是第二个参数,以此类推。特殊的,$0是文件名(包含路径)。 例如: 创建文件test.sh: ```bash #! /bin/bash echo "文件名:"$0 echo "第一个参数:"$1 echo "第二个参数:"$2 echo "第三个参数:"$3 echo "第四个参数:"$4 ``` 然后执行该脚本: ```bash chmod +x test.sh ./test.sh 1 2 3 4 文件名:./test.sh 第一个参数:1 第二个参数:2 第三个参数:3 第四个参数:4 bash testbash2.sh 1 2 3 4 文件名:testbash2.sh 第一个参数:1 第二个参数:2 第三个参数:3 第四个参数:4 ``` 注意:第 10 个及以后的参数不能写成 `$10`,会被解释成 `$1` 拼上字符 `0`,必须写成 `${10}`、`${11}`……这也是上一节"花括号帮助解释器识别变量边界"的典型场景。 ## 其它参数相关变量 | 参数 | 说明 | | --- | --- | | $# | 代表文件传入的参数个数,如上例中值为4 | | $\* | 由所有参数构成的用空格隔开的字符串,如上例中值为"$1 $2 $3 $4" | | $@ | 每个参数分别用双引号括起来的字符串,如上例中值为"$1" "$2" "$3" "$4" | | $$ | 脚本当前运行的进程ID | | $? | 上一条命令的退出状态(注意不是stdout,而是exit code)。0表示正常退出,其他值表示错误 | | $(command) | 返回command这条命令的stdout(可嵌套) | | `command` | 返回command这条命令的stdout(不可嵌套) | `$*` 与 `$@` 在不加双引号时表现相同;加双引号后才有区别:`"$*"` 把所有参数合并成**一个**字符串(相当于 `"$1 $2 $3 $4"`),`"$@"` 保持每个参数独立(相当于 `"$1" "$2" "$3" "$4"`)。遍历参数时应使用 `"$@"`,避免参数本身含空格时被拆开。 --- **项目分区导航**:[[08-变量|变量]] ⬅️ | 09-默认变量 | ➡️ [[10-数组|数组]]