Por que 'myscript.txt' é exibido quando executo o comando
$ ls !(my)*.txt
myscript.txt
hey.txt
e na mesma nota, como o bash está interpretando $ ls !(my)*.txt
e $ ls !(my*).txt
?
Por que 'myscript.txt' é exibido quando executo o comando
$ ls !(my)*.txt
myscript.txt
hey.txt
e na mesma nota, como o bash está interpretando $ ls !(my)*.txt
e $ ls !(my*).txt
?
!(my)*.txt
combinamyscript.txt
porque!(my)
correspondências na string vazia*
partidas emmyscript
.txt
partidas em.txt
(ou
!(my)
correspondemyscript
e*
na string vazia, ou!(my)
corresponde emm
e*
emyscript
...).Você deseja
!(my*).txt
corresponder em nomes de arquivos que terminam.txt
e não começam commy
.Observe que
!(*)
é um operador específico do ksh. Agora também é suportado porbash
mas apenas quando aextglob
opção está ativada e porzsh
, mas apenas quando akshglob
opção está ativada.zsh
também tem seus própriosextendedglob
s que vêm com seu operador de^
negação e o operador~
except / and-not :O operador except / and-not
ksh93
pode ser implementado com:ou com
bash -O extglob
uma versão mais antiga do ksh comObserve, no entanto, que eles diferem do operador
zsh
's~
, pois o último se aplica como um filtro final em todo o padrão glob, enquanto o!(...)
,@(...)
só pode operar em um componente de caminho único do glob (por exemplo ,*/b*~f*r
excluifoo/bar
da expansão de*/b*
)