将文件名读入数组

dub*_*ech 61 unix bash cygwin

我想得到一个文件列表,然后将结果读入一个数组,其中每个数组元素对应一个文件名.这可能吗?

Pau*_*ce. 102

不要使用ls,它不是为此目的.使用globbing.

shopt -s nullglob
array=(*)
array2=(file*)
array3=(dir/*)
Run Code Online (Sandbox Code Playgroud)

nullglob如果没有匹配项,该选项会导致数组为空.

  • @dublintech:你不需要`grep`,只需在你的glob中包含字符串:`array =(*.txt)`或`array =(*foo*)` (10认同)

anu*_*ava 19

以下将在当前目录中创建一个带ls输出的数组arr:

arr=( $(ls) )
Run Code Online (Sandbox Code Playgroud)

虽然使用输出ls完全不安全.

比ls你可以使用的更好,更安全echo *:

arr=( * )

echo ${#arr[@]} # will echo number of elements in array

echo "${arr[@]}" # will dump all elements of the array
Run Code Online (Sandbox Code Playgroud)

  • `ls`不是必需的,不应该用于此目的. (5认同)
  • 如果未引用数组扩展,则数组的所有元素都表示为字符串,而不是数组的各个元素.不带引号的`$ {arr [*]}`和`$ {arr [@]}`是一样的. (2认同)
  • anubhava,请删除您的 `arr=( $(ls) )` 行。或者,如果您想离开它,请明确添加类似**不要这样做,它已损坏。** (2认同)