我刚刚开始学习unix,在命令行参数中遇到了非常基本的疑问。
假设如果在我的脚本中我这样做:
echo $@ #Now this prints all the command line arguments
args=$@ #Args array will take the command line argument array from $@
echo $args
在这里我对最后的陈述有疑问。echo arrayname
因为它应该只打印第一个索引元素,但为什么它显示完整的数组?
如果我在unix中采用一个普通数组并说数组名称是ARR,现在如果我使用echo ARR,它将显示第一个元素而不是所有元素。那么为什么行为与上面的args不同呢?
答案1
$@
其行为与没有索引的普通数组变量不同,因为它$@
具有“集成索引”:它始终意味着“所有元素”。
set -- a b c
echo $@
a b c
set -x
var=$@
+ var='a b c'
ar=(a b c)
+ ar=(a b c)
echo $ar
+ echo a
a
答案2
它正在打印每个元素,因为您设置了变量而不是数组。要设置数组,您需要执行以下操作:
args=($@)