位置参数扩展和自定义数组扩展的不同结果

位置参数扩展和自定义数组扩展的不同结果

我不明白命令的输出存在差异,如下所述:

INPUT="$@"
echo "$INPUT ${#INPUT} ${#INPUT[@]} ${#@}"
# outputs: a b c 5 1 3

arr=(a b c)
echo "$arr ${#arr} ${#arr[@]}"
# outputs: a 1 3

我用 运行一个脚本./my_script.sh a b c

我知道这echo "$arr" 是取消引用$arr第一个元素,然后打印a。同时$INPUT打印命令a b c

对于命令${#INPUT}${#INPUT[@]}原因,输出分别是51。它不应该类似于命令${#arr}和的输出${#arr[@]}吗?

答案1

您将数组分配$@标量 INPUT,结果是字符串a b c,其长度计算结果为 5,“数组”中的元素数量为 1。

也许您打算将数组分配为数组?

input=( "$@" )

相关内容