我认为shell脚本中的句柄$@是给定脚本的所有参数的数组。这是真的吗?
$@
我问是因为我通常使用搜索引擎来收集信息,但我不能谷歌$@,我已经变得太习惯了容易得到一切。
是的。请查看特殊的参数下的Bash手册页(你要去的第一件事):
特殊的参数 shell对几个参数进行了特殊处理。这些参数只能被引用;不允许分配给他们。 *展开到位置参数,从1开始。当展开发生在双引号内时,它展开为单个单词,每个参数的值由IFS特殊变量的第一个字符分隔。也就是说,"$*"等价于"$1c$2c...",其中c是IFS变量值的第一个字符。如果未配置IFS,各参数之间以空格分隔。如果IFS为空,则不使用分隔符连接参数。 @展开到位置参数,从1开始。当展开出现在双引号内时,每个参数展开为一个单独的单词。也就是说,"$@"等价于"$1" "$2"…如果双引号展开出现在一个单词中,则第一个参数的展开与原始单词的开头部分连接,最后一个参数的展开与原始单词的最后部分连接。当没有位置参数时,"$@"和$@展开为空(即,它们被移除)。
特殊的参数
shell对几个参数进行了特殊处理。这些参数只能被引用;不允许分配给他们。
*展开到位置参数,从1开始。当展开发生在双引号内时,它展开为单个单词,每个参数的值由IFS特殊变量的第一个字符分隔。也就是说,"$*"等价于"$1c$2c...",其中c是IFS变量值的第一个字符。如果未配置IFS,各参数之间以空格分隔。如果IFS为空,则不使用分隔符连接参数。
*
"$*"
"$1c$2c..."
c
@展开到位置参数,从1开始。当展开出现在双引号内时,每个参数展开为一个单独的单词。也就是说,"$@"等价于"$1" "$2"…如果双引号展开出现在一个单词中,则第一个参数的展开与原始单词的开头部分连接,最后一个参数的展开与原始单词的最后部分连接。当没有位置参数时,"$@"和$@展开为空(即,它们被移除)。
@
"$@"
"$1"
"$2"
仅仅从阅读中,我永远不会理解"$@"展开为一个单独的参数列表。然而,"$*"是一个由所有参数加在一起组成的参数。
如果还是没有意义,就这么做。
Bash特殊参数用四个shell脚本示例解释 . sh ="http://www.thegeekstuff.com/2010/05/bash-shell-special-parameters/