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