第二十七章 位置参数
第二十七章 位置参数
其它编程语言都能够接受命令行选项和参数,Shell也拥有此项特征。
访问命令行
Shell提供了一组名为位置参数(positional parameters)的变量,其中包含了命令行上的各个单词。这些变量按照0~9分别命名,可以通过下列方式显示:
#!/bin/bash#posit-param: 查看命令行参数的脚本echo "
\$0 = $0
\$1 = $1
\$2 = $2
\$3 = $3
\$4 = $4
\$5 = $5
\$6 = $7
\$8 = $8
\$9 = $9
"
运行结果如下:
确定参数个数
Shell还提供了变量$#,其中包含了命令行中的参数的个数:
#!/bin/bash# posit-param:查看命令行参数的脚本echo "
Number of arguments: $#
\$0 = $0
\$1 = $1
\$2 = $2
\$3 = $3
\$4 = $4
\$5 = $5
\$6 = $7
\$8 = $8
\$9 = $9
"
运行结果如下:
shift-访问多个参数
上个例子中输入的参数超过了空间参数的个数,因此有些参数并未显示,Shell提供的Shift命令可以解决此问题。每执行一次shift命令,就将所有的参数"左移一个位置"。通过shif命令,可以自始自终和一个参数打交道(除了$0):
#!/bin/bash#posit-param2: 脚本显示所有参数count=1while [[ $# -gt 0 ]]; doecho "Argument $count = $1"count=$((count + 1))shift
done
运行结果如下:
Shell的位置参数也可以用于Shell函数。
批量处理位置参数
有时候批量处理所有位置参数更为实用。Shell提供了两个特殊参数*和@,两者均可扩展成完整的位置参数列表,。
特殊参数*和@
参数 | 描述 |
---|---|
$* | 扩展成从1开始的位置参数列表。如果它出现在双引号内部,则扩展成由双引号引用的字符串,其中包含了所有的位置参数,彼此之间以Shell变量IFS的第一个字符分割符(默认是空格符) |
$@ | 扩展成从1开始的位置参数列表。如果它出现在双引号内部,则将每个位置参数扩展成独立的单词 |
例如:
#!/bin/bash#posit-params3:演示$*和$@的脚本print_params () {echo "\$1 = $1"echo "\$2 = $2"ehco "\$3 = $3"echo "\$4 = $4"
}pass_params () {echo -e "\n" '$* :'; print_params $*echo -e "\n" '"$*" :'; print_params "$*"echo -e "\n" '$@ :'; print_params $@echo -e "\n" '"$@" :'; print_params "$@"
}pass_params "word" "words with spaces"
运行结果如下:
∗ 和 *和 ∗和@生成了4个单词:
word words with spaces
"$*"生成了一个单词:
“word words with spaces”
"$@"生成了2个单词:
“word” “words with spaces”
Shell提供了4种获取位置参数列表的不同方法中,到目前为止, ”$@"适用大部分情况,因为其保留了每个位置参数的整体性。为了保证安全性,应该坚持使用这种方法。