折叠:仅输出第一个字符

折叠:仅输出第一个字符

我正在使用fold字符串创建字符数组。

INPUT=$1
arr=($(fold -w1 <<< "$INPUT"))
echo "$arr"
echo "$arr[@]"

我使用命令./myProgram 1234来执行脚本。

预期输出:1 2 3 4

我得到什么:11[@]

答案1

您已正确地将输出分配给数组,但取消引用需要帮助:

回显“$arr”

简单地输出数组的第一个元素,即1

回显“$arr[@]”

缺少大括号,它会告诉 bash 您想要为数组添加下标;按原样,它取消$arr引用第一个元素,如上所述,然后打印[@].

相反,使用(例如):

printf '%s ' "${arr[@]}"

请参阅bash 手册中有关数组的部分它说:

可以使用 引用数组的任何元素${name[subscript]}。需要使用大括号以避免与 shell 的文件名扩展运算符发生冲突。

相关内容