
Скрипт 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]
каталоге.