Qual é o glob que combina com todos os ~ / xy * exceto por ~ / xyz *?

3

Isso não funcionará: ~/xy*~~/xyz* .

Eu sei que $HOME/xy*~$HOME/xyz* funciona, mas gostaria de saber se há uma maneira de obter o mesmo efeito com os prefixos de caminho que começam com ~ , como ~/ ou ~user/ ou ~nameddir/ .

    
por kjo 24.02.2017 / 15:57

3 respostas

2

Basicamente, você espera que o shell expanda o til em $HOME no começo e em algum lugar no meio de uma palavra que não acontecerá: o primeiro ~ será expandido em $HOME , mas não os outros (neste caso, devido a extendedglob ser definido, eles são tratados como operadores glob) ...
Como observado, existem maneiras de fazer isso - até a sugestão do Sundeep está OK porque zsh entende ksh -como globs (que é onde o bash copiou elas):

setopt kshglob
setopt nobareglobqual
print -rl ~/xy?([^z]*)
    
por 24.02.2017 / 20:22
3

~ só é expandido em poucos contextos .

Aqui, você pode fazer ~/xy^z* ou ~/xy(*~z*) .

    
por 24.02.2017 / 21:19
2

Você pode realizar a negação:

~/(xy|xy[^z]*)

ou menor:

~/xy(|[^z]*)
    
por 24.02.2017 / 16:01

Tags