O Zsh não possui curingas não-gulosos. O único lugar em que consigo pensar em correspondência não-gananciosa é ao remover um prefixo com os formulários de substituição de parâmetro ${VAR#PATTERN}
e ${VAR%PATTERN}
(em oposição a ${VAR##PATTERN}
e ${VAR%%PATTERN}
que correspondem a greedily).
É sempre possível traduzir um padrão usando curingas não-vorazes em um que não os use, mas a tradução pode ser dolorosa e o tamanho do resultado é exponencial no tamanho do original no pior dos casos. Um exemplo clássico de quando a correspondência não-gananciosa seria conveniente é quando você deseja corresponder um intervalo numérico seguido por outra coisa com, por exemplo, <1-42>*
: corresponde a 43a
porque <1-42>
corresponde a 4
; uma solução alternativa é <1-42>([^0-9]*)#
. Dependendo do que você deseja fazer, outros métodos podem ser mais fáceis, por exemplo, organizar o uso de um prefixo ou substituição de sufixo, ou abordar o problema de um ângulo diferente.
Para o caso de uso de uma expansão de histórico em que você deseja alterar o comando, há uma abordagem diferente que é um caractere mais curto como seu exemplo e é mais confiável em seu exemplo específico. Em vez de ^ff* ^open
que corresponde a ff
em qualquer lugar na linha de comando e só funciona se o argumento não contiver um espaço, você pode usar
open !ff:*
que corresponde apenas a ff
no início da linha de comando ( !?ff
corresponderia em qualquer lugar).