所谓的位置参数指的也就是shell脚本的命令行参数。在shell的世界里,它们同时也可以是函数的参数。各参数都由整数来命名。基于历史原因,当它超过9时,就应该用大括号把数字框起来。
echo first arg is $1
echo tenth arg is ${10}
此外通过特殊变量,还可以取得参数的总数,以及一次取得所有参数。
$#
提供传递到shell脚本或函数的参数总数。当你是为了处理选项和参数而建立循环时,它会很有用。
$*, $@
一次表示所有的命令行参数。这两个参数可用来把命令行参数传递给脚本或函数所执行的程序。
"$*"
将所有命令行参数视为单个字符串。等同于"$1 $2 $3 ..."。$IFS的第一个字符用来作为分割字符,以分割不同的值来建立字符串。举例:
printf "The arguments were %s\n" "$*“
"$@"
将所有命令行参数视为单独的个体,也就是单独字符串。等同于"$1" "$2" ....。这是将参数传递给其他程序的最佳方式,因为它会保留所有内嵌在每个参数里的任何空白。
例: lpr "$@" 显示每一个文件