kshの正規表現は、tgz、tar.tgzを拡張するために使用されます。

kshの正規表現は、tgz、tar.tgzを拡張するために使用されます。

tgz次の拡張子を持つファイルを識別するために正規表現(ksh)を取得しようとしていますtar.gz。いろいろ試してみましたが、うまくいきませんでした。私はこの正規表現を使用してこれらの拡張子を持つファイルのみを選択していくつかの処理を行います。TGZTAR.GZ

if [ -f $myregexp ]; then
   ..... 
fi

ベストアンサー1

[ -f "$myregexp" ]またはという[[ -f $myregexp ]]変数があるかどうかをテストします$myregexp。 (小括弧には二重引用符が必要です。)

globパターンに一致するファイルが存在するかどうかをテストしたい場合は、直接的な方法はありません。 2つのステップで行う必要があります。まず、一致リストを作成し、リストが空であるかどうかをテストします。

a=( ~(Ni)*.@(tgz|tar.gz) )
if [[ ${#a} -ne 0 ]]; then …

これはさまざまなksh関連機能を使用します。

  • ~(N)一致するものがない場合、空のプレフィックスのリストが生成されます。
  • ~(i)大文字と小文字を区別しない一致のための接頭辞です。
  • @(foo|bar)一致させるglob構文fooまたはbar

これはbashと同じです。 Bashでは、構文やその他のksh glob拡張extglobに使用されるオプションから、一致しないグローバル変数と大文字と小文字を区別しないNULL拡張を取得できます。@(foo|bar)

shopt -s nocaseglob nullglob extglob
a=( *.@(tgz|tar.gz) )
if [[ ${#a} -ne 0 ]]; then …

これはzshと同じです。このオプションは、大文字と小文字を区別しない一致プレフィックスextended_globに必要です。(#i)glob(N)修飾子は、globの空の拡張子が一致しないことを示します。

setopt extended_glob
a=( (#i)*.(tgz|tar.gz)(N) )
if [[ ${#a} -ne 0 ]]; then …

おすすめ記事