パターン内のzshスクリプトのパラメータをチェックする方法

パターン内のzshスクリプトのパラメータをチェックする方法

を実行する zsh スクリプト:script.zsh nameabc01では、これがこのパターン内にあるscript.zshかどうかをチェックして、何かを続行するか、スクリプトを終了するかを決定する必要があります。nameabc01na*abc*

どうすればそれを達成できるでしょうか?

この質問を拡張すると、ファイル内のパターンのリスト(改行で区切られている)をチェックすることで、これをどのように実現できるでしょうか?

答え1

引数があり、最初の引数が何らかの glob パターンと一致することをテストします。

#!/usr/bin/env zsh
if (( # == 0 )); then
   print >&2 "Usage: $0 na*abc* ..."
   exit 1
fi
if [[ $1 != na*abc* ]]; then
   print >&2 "not ok"
   exit 1
fi

*.zsh(はい、私はシェル スクリプトを 3 スペースでインデントし、拡張子を付けることは決してありません*.sh) テストできます。

% ./argchecker
Usage: ./argchecker na*abc* ...
% ./argchecker wombat
not ok
% ./argchecker na1abc1
% ./argchecker na1111111111abc1111111111
% 

許可するna1abc1が拒否する場合は、の代わりにを使用するか、または と一致する正規表現と適切な正規表現に切り替えるna1111111111abc1111111111必要があります。?*=~

ファイルからパターンのリストを読み取ることも可能ですが、必要なロジックのためにもう少しコードが必要になります。

#!/usr/bin/env zsh
if (( # == 0 )); then
   print >&2 "Usage: $0 todofixme ..."
   exit 1
fi
globs=(${(f)"$(< patternfile)"})
ret=1
for g in $globs; do
    if [[ $1 == $~g ]]; then
       ret=0
       break
    fi
done
if (( ret == 1 )); then
   print >&2 "not ok"
   exit 1
fi

そしてpatternfile、いくつかのテスト。

% cat patternfile
cat*
*bat
% ./pargchecker fish
not ok
% ./pargchecker catfish
% ./pargchecker wombat
% 

zshexpn(1)および内のドキュメントは、zshparam(1)おそらくディレクトリ内の既存のコードか、覗き見する作業です$fpath[-1]

関連情報