2

寻找一种在过滤目录时基于正则表达式创建 bash 数组的方法。

例如我这样做:

A. local -a arr=( "$1"/* ); arr=( "${arr[@]##*/} );
- Creates array of all contents of the path sent in $1.
B. local -a arr=( "$1"/*"$2" ); arr=( "${arr[@]##*/}" );
- Creates array on filter expression in $2.

(我不知道为什么 * 没有出现"$1"/*"$2"在 B 中。如果我把 2 ** 都显示出来!)

但它只适用于简单的表达式:示例 '.pub' - 列出所有公钥。

但是,如果我发送“z.*.zip”来查找所有以“z.”开头的 zip 文件。不起作用。

我什至尝试取出*"$2"in arr=( "$1"/*"$2" )*"$2"没有出现!

您的帮助将不胜感激。

谢谢你。

4

1 回答 1

1

Glob 不会在双引号中展开。你必须取消引用它:

local -a arr=( "$1"/*$2 ); 

为避免出现空格问题,您可以使用IFS=""first 来禁止分词,同时仍对未引用的变量进行全局扩展。

这是一个示例调用:

$ cat script

foo() {
  local -a arr=( "$1"/*$2 );
  echo "Matching files: " "${arr[@]}"
}

foo "." "z.*.zip"

$ ls
lobsters.png  pelican.zip  script  z.bar.zip  z.cow.txt

$ bash script
Matching files:  ./z.bar.zip

$
于 2014-08-11T18:46:10.647 回答