2012-09-13 21 views
7

$*在shell脚本中究竟意味着什么?

例如,考虑下面的代码片段

​​
+1

HTTP参数的个数:// TLDP .org/LDP/abs/html/internalvariables.html#ARGLIST – alfasin

+0

命令行中的所有位置参数调用脚本:http://tldp.org/LDP/abs/html/internalvariables.html#APPREF – GreenMatt

+0

基于POSIX的文档在这里特别有用,因为它们不仅适用于bash:http://pubs.opengroup.org/ onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_05_02 –

回答

7

它表示传递给脚本或函数的所有参数,按字分割。

它通常是错误的,应该被替换为"[email protected]",它正确地分隔了参数。

+3

那么,@ДМИТРИЙМАЛИКОВ(Dmitri?)已经解释了$ *最初是如何构造成单个字符串的。这里重要的是它随后受到shell的正常分词,除非*它被引用。 “$ *”将确保参数仍然被处理为一个单一的长字符串。 “$ @”强制将参数列表作为引用字符串的数组处理。每个都有其用处,重要的是要知道其中的差异。 –

6

很容易自己找到答案:专门

特殊参数

shell对几个参数:man bash/\$\* 。这些参数只能被引用;不允许分配给他们。

  • 扩展到位置参数,从一开始。当扩展出现在双引号内时,它将扩展为单个字,每个参数的值由特殊变量的第一个字符分隔。也就是"$*"相当于"$1c$2c...",其中cIFS变量的第一个字符。如果IFS未设置,则参数由空格分隔。如果IFS为空,则参数连接时不插入分隔符。
1

$*扩展为传递给该shell脚本的所有参数。

$0 = shell脚本的名称

$1 =第一个参数

$2 =第二个参数 ...等

$# =传递给shell脚本