17. 位置参数
传递给 shell 脚本的参数可以作为位置参数进行引用。
$1
- 第 1 个参数$2
- 第 2 个参数- ..
$10
- 第 10 个参数$11
- 第 11 个参数
当你有两个数字时,你应该使用 ${}
格式来引用它们。 $0
是脚本的名称。
$ cat args.sh echo "Script Name: $0" echo "First Parameter: $1" echo "Second Parameter: $2" echo "Third Parameter: $3" echo "All Parameters: $*" echo "All Parameters: $@" echo "Total Number of Parameters: $#" $ ./args.sh CA NY UT Script Name: ./args.sh First Parameter: CA Second Parameter: NY Third Parameter: UT All Parameters: CA NY UT All Parameters: CA NY UT Total Number of Parameters: 3
$0
、$*
、$@
不是位置参数。 它们是特殊参数。 我们将在后面的技巧中详细讨论特殊参数。
另外,请注意$0
的值是根据脚本的调用方式设置的:
- 对于
./args.sh CA NY UT
,$0
是./args.sh
。 - 对于
/home/ramesh/args.sh CA NY UT
,$0
是/home/ramesh/args.sh
。
出于调试目的,如果要显示所有参数,请使用以下单行代码片段。
$ vi args1.sh printf '"%b"\n' "$@" | cat -n $ ./args1.sh CA NY UT 1 "CA" 2 "NY" 3 "UT"
$*
和 $@
之间的区别:
它们的行为完全相同,除非您用双引号包围它们。 当双引号"$*"
时,它会转换为"${1}x${2}x${3}x..."
。 其中,x
是
IFS
变量的第一个字符。
因此,除非有特定原因,否则应始终使用 $@
。 以下示例显示了这种差异。
$ vi args2.sh IFS="<^" echo -n '[$*] = ' echo $* echo -n '[$@] = ' echo $@ echo -n '["$*"] = ' echo "$*" echo -n '["$@"] = ' echo "$@" $ ./args2.sh one two three [$*] = one two three [$@] = one two three ["$*"] = one<two<three ["$@"] = one two three