如何檢查 zsh 腳本的參數是否處於模式中

如何檢查 zsh 腳本的參數是否處於模式中

執行的 zsh 腳本:script.zsh nameabc01script.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]目錄中的現有程式碼。

相關內容