
執行的 zsh 腳本:script.zsh nameabc01
,script.zsh
我需要檢查是否nameabc01
處於此模式中na*abc*
,或不繼續執行某些操作或決定退出腳本。
我們怎樣才能做到這一點?
為了擴展這個問題,我們如何透過檢查文件中的模式列表(以換行符號分隔)來實現這一點?
答案1
測試是否有參數且第一個參數是否與某些全域模式相符:
#!/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
(是的,我將 shell 腳本縮排三個空格,但我從來沒有在它們上添加*.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]
目錄中的現有程式碼。