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 拆分将再次发生。
我正在尝试查找以下命令的输出是否仅在数组中存储了一个文件 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 拆分将再次发生。