变量名只能包含数字、字母和下划线, 因为某些包含其他字符的变量有特殊含义, 这样的变量被称为特殊变量
变量 | 含义 |
---|---|
$0 |
当前脚本的文件名 |
$n |
传递给脚本或函数的参数。n 是一个数字, 表示第几个参数。例如, 第一个参数是$1, 第二个参数是$2 |
$# |
传递给脚本或函数的参数个数 |
$* |
传递给脚本或函数的所有参数 |
$@ |
传递给脚本或函数的所有参数。被双引号(" “)包含时, 与 $* 稍有不同, 下面将会讲到 |
$? |
上个命令的退出状态, 或函数的返回值 |
$$ |
当前 Shell 进程 ID。对于 Shell 脚本, 就是这些脚本所在的进程 ID |
例如
echo $$
29949
命令行参数
运行脚本时传递给脚本的参数称为命令行参数。命令行参数用 $n
表示, 例如, $1
表示第一个参数, $2
表示第二个参数, 依次类推。
#!/bin/bash
echo "File Name: $0"
echo "First Parameter: $1"
echo "First Parameter: $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters: $#"
运行结果
./test.sh Zara Ali
File Name : ./test.sh
First Parameter: Zara
Second Parameter: Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters: 2
$*
和 $@
的区别
在 Bash 脚本中, $*
和 $@
都用于表示传递给脚本或函数的所有位置参数, 但它们之间有细微的区别, 主要体现在它们处理引号 ("
) 的方式。
当你在循环中使用这两者时, 区别会更加明显
for arg in "$@"; do
echo "$arg"
done
上述代码会逐个输出每个参数 (即使参数中有空格, 它们也会被当作一个整体处理)。
如果使用 $*
, 则会将所有参数作为一个字符串传递给 for
循环, 可能会导致意外的行为
总结:
$*
: 将所有参数视为一个单独的字符串$@
: 每个参数被独立处理, 在双引号中使用时效果最为显著