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