在过滤目录时寻找基于正则表达式创建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"
没有出现!
非常感谢您的帮助。
谢谢。
答案 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
$