![位置参数扩展和自定义数组扩展的不同结果](https://linux22.com/image/143284/%E4%BD%8D%E7%BD%AE%E5%8F%82%E6%95%B0%E6%89%A9%E5%B1%95%E5%92%8C%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E7%BB%84%E6%89%A9%E5%B1%95%E7%9A%84%E4%B8%8D%E5%90%8C%E7%BB%93%E6%9E%9C.png)
我不明白命令的输出存在差异,如下所述:
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[@]}
原因,输出分别是5
和1
。它不应该类似于命令${#arr}
和的输出${#arr[@]}
吗?
答案1
您将数组分配$@
给标量 INPUT
,结果是字符串a b c
,其长度计算结果为 5,“数组”中的元素数量为 1。
也许您打算将数组分配为数组?
input=( "$@" )