l[a,l,s,h,] * não corresponde a l porque [] não é uma lista separada por vírgulas para expandir - essa é a sintaxe da expansão de chaves. Com [...] , [a,l,s,h,] é igual a [alsh,] e não significa alsh ou nada. Você precisa de l[alsh]# .
Para ls , o espaço parece estar quebrando essa correspondência, apesar de tudo depois disso ser opcional. Então, na prática, isso parece ignorar ls apenas se tiver um argumento:
~ ls foo
ls: cannot access 'foo': No such file or directory
~ tail ~/.histfile
HISTORY_IGNORE='([bf]g *|cd ..|l[a,l,s,h,]*|less *|vi[m,] *)'
l
tail ~/.histfile
l
tail ~/.histfile
Parece que você precisa tornar o * opcional também:
HISTORY_IGNORE='([bf]g *|cd ..|l[alsh]#( *)#|less *|vim# *)'