bash4 - 在regex过滤器上创建目录内容数组

时间:2014-08-11 18:21:55

标签: arrays regex bash filter bash4

在过滤目录时寻找基于正则表达式创建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.

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

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

但是如果我发送'z。*。zip'来找到所有以'z'开头的zip文件。不起作用。

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

非常感谢您的帮助。

谢谢。

1 个答案:

答案 0 :(得分:1)

Globs不会以双引号扩展。你必须取消引用它:

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

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

这是一个示例调用:

$ 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

$