bash 将命令的输出存储在数组中

bash store output of command in array

我正在尝试查找以下命令的输出是否仅在数组中存储了一个文件 array_a

array_a = $(find /path/dir1 -maxdepth 1 -name file_orders?.csv)
echo $array_a
/path/dir1/file_orders1.csv /path/dir1/file_orders2.csv
echo ${#array_a[@]}
1

所以它告诉我只有一个元素,但显然有 2 个。 如果我输入 echo ${array_a[0]} 它不会 return 我什么。就像,变量 array_a 根本不是一个数组。我怎样才能强制它存储数组中的元素?

您缺少定义数组的括号。但根本问题是 运行 find 内的反引号将在白色 space 上拆分,因此如果任何匹配文件可能包含 space,它将在中产生多个元素结果数组。

无论如何,使用 -maxdepth 1,只需使用 shell 的 globbing 工具即可;你根本不需要 find

 array_a=(/path/dir1/file_orders?.csv)

使用数组的时候也要注意引号。

 echo "${array_a[@]}"

如果没有引号,白色space 拆分将再次发生