OnWorks Linux 和 Windows 在线工作站

商标

工作站免费在线托管

<上一页 | 内容 | 下一页>

处理位置参数 集体

有时将所有位置参数作为一个组进行管理很有用。 例如,我们可能想围绕另一个程序编写一个“包装器”。 这意味着我们创建了一个脚本或 shell 函数来简化另一个程序的调用。 在这种情况下,包装器提供了一个神秘的命令行选项列表,然后将一个参数列表传递给低级程序。

为此,shell 提供了两个特殊参数。 它们都扩展为位置参数的完整列表,但在相当微妙的方面有所不同。 他们是:


表 32-1:* 和 @ 特殊参数


参数说明

参数说明

$* 扩展为位置参数列表,从 1 开始。当被双引号包围时,它扩展为包含所有位置参数的双引号字符串,每个位置参数由 IFS shell 变量的第一个字符分隔(默认情况下为空格特点)。


图片

$@ 展开到位置参数列表中,从1开始。当被双引号包围时,它将每个位置参数展开成一个被双引号包围的单独单词。


图片


这是一个显示这些特殊参数的脚本:

整体处理位置参数


#!/斌/庆典

# posit-params3: 脚本来演示 $* 和 $@ print_params() {

echo "\$1 = $1" echo "\$2 = $2" echo "\$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" "带空格的单词"

#!/斌/庆典

# posit-params3: 脚本来演示 $* 和 $@ print_params() {

echo "\$1 = $1" echo "\$2 = $2" echo "\$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" "带空格的单词"


在这个相当复杂的程序中,我们创建了两个参数:“word”和“words with space”,并将它们传递给 传递参数 功能。 反过来,该函数将它们传递给 打印参数 函数,使用带有特殊参数的四种方法中的每一种 $* $@. 执行时,脚本显示了差异:


图片

[我@linuxbox ~]$ 位置参数3


$* :


$1

=

$2

=

$3

=

-

$4

=

剩余名额

"$*" :


$1

=

带空格的单词

$2

=

$3

=

$4

=

$@ :


$1

=

$2

=

$3

=

-

$4

=

剩余名额

"$@" :

$1 = 字


$2 = 带空格的单词

$ 3 =

$ 4 =

$2 = 带空格的单词

$ 3 =

$ 4 =


根据我们的论点,双方 $* $@ 产生一个四字结果:

带空格的单词

"$*" 产生一个单词结果:

“带空格的单词”

"$@" 产生两个字的结果:

"word" "带空格的单词"

这符合我们的实际意图。 从中吸取的教训是,尽管 shell 提供了四种不同的方式来获取位置参数列表,”$@" 在大多数情况下是迄今为止最有用的,因为它保留了每个位置参数的完整性。


OnWorks 的顶级操作系统云计算: