if [[ ! ${dirPath} =~ "^/[A-Za-z0-9/_-]+$" ]]; then
echo "Success"
Isso testará $dirPath
na sequência literal ^/[A-Za-z0-9/_-]+$
e inverterá o resultado. Em outras palavras, imprimirá Success
quando $dirPath
for qualquer coisa diferente daquela cadeia literal. Isso ocorre porque os caracteres citados em um regex perdem seu significado especial nas versões atuais do Bash e, é claro, o !
trabalha para inverter o teste.
Se você quiser testar essa variável com relação à regex atual, é mais fácil colocar a regex em uma variável primeiro e deixá-la sem aspas (usar uma variável pode não ser estritamente necessário, mas evita alguns problemas de análise com expressões regulares complexas):
dirPath="/var/lib/test"
re='^/[A-Za-z0-9/_-]+$'
if [[ ${dirPath} =~ $re ]]; then
echo "'$dirPath' starts with a slash, and is composed of alphanumerics, hyphens, underscores and slashes only"
else
echo "'$dirPath' is of a forbidden format"
fi
Claro, se você quiser testar se esse caminho é um diretório existente, use -d
:
if [[ -d $dirPath ]]; then
echo "'$dirPath' exists and is a directory
fi