No
ls -d ./foldername/*.{a,b,}test
{a,b,...} não é um operador da glob, isso é expansão de braçadeira, primeiro expandido para:
ls -d ./foldername/*.atest ./foldername/*.btest ./foldername/*.test
E cada glob expandido individualmente e, se algum glob não corresponder, o comando será cancelado conforme o esperado em zsh(ou fish; in bash, você precisará da failglobopção para obter um comportamento semelhante).
Aqui, você deseja usar um único globo que corresponda a todos esses arquivos e cancelar o comando apenas se esse globo não corresponder a nenhum arquivo:
ls -d ./foldername/*.(a|b|)test
Você não deseja usar nullglob, como se nenhum dos globs correspondesse, ele seria executado lssem argumentos, portanto, liste o diretório atual. cshnullglobé melhor nesse sentido, pois remove globs não correspondentes, mas ainda cancela o comando se todos os globs falharem.
Você não gostaria de usar nonomatch, pois isso daria a você o comportamento quebrado, o bashque seria uma pena.
Para uma alternativa global que funcione em ambos zshe bash, você pode usar os globos ksh ( set -o kshglobin zshe shopt -s extglobin bash).
Então, você faria:
ls -d ./foldername/*.@(a|b|)test
ou:
ls -d ./foldername/*.?([ab])test
Adicione a failglobopção bashpara evitar que o glob seja transmitido literalmente para lsquando não corresponder.
Consulte Por que o nullglob não é o padrão? Para maiores informações.
/dev/null?