AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 505498
Accepted
Git Gud
Git Gud
Asked: 2019-03-11 09:17:53 +0800 CST2019-03-11 09:17:53 +0800 CST 2019-03-11 09:17:53 +0800 CST

Curingas/Globbing: Os intervalos de caracteres são problemáticos?

  • 772

Na linha de comando do Linux, William Shotts afirma que os intervalos de caracteres podem ser problemáticos. Veja o trecho relevante abaixo, a ênfase é minha .

Intervalos de caracteres

Se você está vindo de outro ambiente do tipo Unix ou tem lido alguns outros livros sobre este assunto, você pode ter encontrado as notações de intervalo de caracteres [A-Z]e . [a-z]Essas são notações tradicionais do Unix e também funcionavam em versões mais antigas do Linux. Eles ainda podem funcionar, mas você deve ter cuidado com eles porque eles não produzirão os resultados esperados a menos que sejam configurados corretamente. Por enquanto, você deve evitar usá-los e usar classes de caracteres .

Do que ele está falando nas últimas frases? O que os padrões POSIX dizem sobre isso?

posix wildcards
  • 1 1 respostas
  • 461 Views

1 respostas

  • Voted
  1. Best Answer
    ilkkachu
    2019-03-11T09:56:52+08:002019-03-11T09:56:52+08:00

    Isso provavelmente se refere a localidades com caracteres maiúsculos e minúsculos ordenados alternadamente, em vez do primeiro e depois do outro:

    $ echo "$LANG"
    en_US.UTF-8
    $ touch a A z Z
    $ ls
    A  Z  a  z
    $ bash -c 'echo [a-z]'
    a A z
    

    No entanto, a classe de personagem apropriada funciona:

    $ bash -c 'echo [[:lower:]]'
    a z
    

    Mas também pode corresponder mais do que apenas aa z:

    $ LANG=fi_FI.UTF-8
    $ touch ä Ä ö Ö
    $ bash -c 'echo [[:lower:]]'
    a z ä ö
    

    Se você quiser evitar isso e corresponder apenas as letras minúsculas do inglês aa z, o Bash, em particular, tem uma opção para interpretar os intervalos na ordem ASCII:

    $ bash -c 'shopt -s globasciiranges; echo [a-z]'
    a z
    

    E você sempre pode forçar a ordem de agrupamento padrão:

    $ LC_COLLATE=C bash -c 'echo [a-z]'
    a z
    

    Quanto ao que o POSIX diz, parece-me que os intervalos nas expressões entre colchetes são deixados indefinidos em localidades diferentes do POSIX padrão. A descrição de correspondência de padrões refere-se à descrição regex de expressões de colchetes , que diz:

    Na localidade POSIX, uma expressão de intervalo representa o conjunto de elementos de ordenação que se encontram entre dois elementos na sequência de ordenação, inclusive. Em outras localidades, uma expressão de intervalo tem um comportamento não especificado: aplicativos estritamente em conformidade não devem depender se a expressão de intervalo é válida ou no conjunto de elementos de agrupamento correspondidos.

    • 2

relate perguntas

  • Desde quando o POSIX e o GNU rm não excluem /?

  • Como posso criar um loop aritmético em um script de shell POSIX?

  • Qual é a maneira correta de lidar com o código de saída do último comando?

  • O que acontece com uma sessão unix quando o líder da sessão sai?

  • mv *.cache.{js,woff} sub_pasta - funciona como comando shell, mas não dentro de um Makefile

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve