echo 语句中的基本疑问

echo 语句中的基本疑问

我刚刚开始学习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=($@)

相关内容