zshスクリプトのパラメータがモードにあるかどうかを確認する方法

zshスクリプトのパラメータがモードにあるかどうかを確認する方法

zshスクリプトの実行:このモードになっていることを確認するか、script.zsh nameabc01操作を続行しないか、スクリプトを終了するかを決定する必要があります。script.zshnameabc01na*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

(はい、シェルスクリプトを3つのスペースにインデントしますが、追加も*.zsh拡張*.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]

関連情報