Как проверить соответствие параметра скрипта zsh шаблону или нет

Как проверить соответствие параметра скрипта zsh шаблону или нет

Скрипт 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

(Да, я делаю отступ в скриптах оболочки в три пробела и никогда не добавляю к ним *.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]каталоге.

Связанный контент