$*
在shell脚本中究竟意味着什么?
例如,考虑下面的代码片段
$*
在shell脚本中究竟意味着什么?
例如,考虑下面的代码片段
它表示传递给脚本或函数的所有参数,按字分割。
它通常是错误的,应该被替换为"[email protected]"
,它正确地分隔了参数。
那么,@ДМИТРИЙМАЛИКОВ(Dmitri?)已经解释了$ *最初是如何构造成单个字符串的。这里重要的是它随后受到shell的正常分词,除非*它被引用。 “$ *”将确保参数仍然被处理为一个单一的长字符串。 “$ @”强制将参数列表作为引用字符串的数组处理。每个都有其用处,重要的是要知道其中的差异。 –
很容易自己找到答案:专门
特殊参数
shell对几个参数:
man bash
→/\$\*
。这些参数只能被引用;不允许分配给他们。
- 扩展到位置参数,从一开始。当扩展出现在双引号内时,它将扩展为单个字,每个参数的值由特殊变量的第一个字符分隔。也就是
"$*"
相当于"$1c$2c..."
,其中c
是IFS
变量的第一个字符。如果IFS
未设置,则参数由空格分隔。如果IFS
为空,则参数连接时不插入分隔符。
$*
扩展为传递给该shell脚本的所有参数。
$0
= shell脚本的名称
$1
=第一个参数
$2
=第二个参数 ...等
$#
=传递给shell脚本
HTTP参数的个数:// TLDP .org/LDP/abs/html/internalvariables.html#ARGLIST – alfasin
命令行中的所有位置参数调用脚本:http://tldp.org/LDP/abs/html/internalvariables.html#APPREF – GreenMatt
基于POSIX的文档在这里特别有用,因为它们不仅适用于bash:http://pubs.opengroup.org/ onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_05_02 –