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"インも取り出してみましたarr=( "$1"/*"$2" )*"$2"現れない!

どうぞよろしくお願いいたします。

ありがとうございました。

4

1 に答える 1

1

グロブは二重引用符で展開されません。引用符を外す必要があります:

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 に答える