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 / 498213
Accepted
FelixJN
FelixJN
Asked: 2019-02-02 13:55:42 +0800 CST2019-02-02 13:55:42 +0800 CST 2019-02-02 13:55:42 +0800 CST

seq separador decimal

  • 772

Usando um seqcomando com números de ponto flutuante, minha saída vem com vírgulas em vez de pontos como separadores decimais, apesar de usar pontos na entrada:

seq 0.1 0.3 1.3
0,1
0,4
0,7
1,0
1,3

Presumi que isso estivesse vinculado ao locale LC_NUMERIC, que está definido como de_DE.UTF-8, no entanto, uma alteração para en_US.UTF-8não corrigi-lo e outro sistema que tenho usando as mesmas configurações de localidade retorna pontos. Mesmo definir explicitamente um formato via, por exemplo -f %1.2, não retorna pontos, mas vírgulas como separadores decimais.

Onde e como mudo esse comportamento? Como garantir que meu script esteja livre de erros em qualquer sistema? Obviamente, qualquer saída será inutilizável para processamento adicional se não for reprocessada por meio trde semelhante.

Usando uma instalação em inglês do Mint no fuso horário alemão e raspian na outra máquina.


Edit: localeconfigurações nas máquinas fornecidas:

A "vírgula":

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=

O "ponto":

LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC=de_DE.UTF-8
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY=de_DE.UTF-8
LC_MESSAGES="C.UTF-8"
LC_PAPER=de_DE.UTF-8
LC_NAME=de_DE.UTF-8
LC_ADDRESS=de_DE.UTF-8
LC_TELEPHONE=de_DE.UTF-8
LC_MEASUREMENT=de_DE.UTF-8
LC_IDENTIFICATION=de_DE.UTF-8
LC_ALL=

A configuração LANGUAGEnão afeta o resultado.

shell-script terminal
  • 1 1 respostas
  • 3428 Views

1 respostas

  • Voted
  1. Best Answer
    FelixJN
    2019-02-02T15:35:02+08:002019-02-02T15:35:02+08:00

    Para excluir erros nas próprias localidades, eu (re)gerei ambos de_DE.UTF-8e en_US.UTF-8via

    dpkg-reconfigure locales
    

    e agora o seqcomportamento parece ser dependente de LC_NUMERIC AND LANG .

    Se LC_NUMERICnão estiver definido/vazio, LANGdefine o comportamento alternando LC_NUMERICentre de_DE.UTF-8e en_US.UTF-8alterna entre vírgulas e pontos, respectivamente.


    Perigos específicos

    No próprio caso de definir um valor errado/inexistente para LANGe um não baseado em pontos locale, o comportamento pode ser misturado em alguns casos especiais, por exemplo

    LANG=en_US
    #it should be en_US.UTF-8
    LC_NUMERIC=de_DE.UTF-8
    
    seq 0.1 0.2 1.3
    0.1
    0.3
    0.5
    0.7
    0.9
    1.1
    1,3
    

    Não aparece para, seq 0.1 0.2 1.4mas também para seq 0.1 0.2 1.9- comportamento muito estranho e IMHO muito perigoso. Portanto, tenha cuidado com a portabilidade seqou defina localidades para qualquer script.

    Adivinhando descontroladamente, isso parece estar relacionado a algumas alterações manuais em casos específicos (consulte: https://lists.gnu.org/archive/html/bug-coreutils/2008-09/msg00192.html )


    ATUALIZAR:

    A sugestão dos mantenedores para evitar erros devido a formatos de saída localizados é definir a localidade no próprio script ( LC_NUMERIC=C). Alterar esse comportamento não está planejado. (Veja o tópico vinculado com o patch abaixo)

    O problema com a saída mista de ponto e vírgula devido a configurações de localidade incorretas foi reconhecido como um bug e já corrigido pelos mantenedores:

    https://lists.gnu.org/archive/html/coreutils/2019-02/msg00002.html

    • 5

relate perguntas

  • Subtraindo a mesma coluna entre duas linhas no awk

  • Um script que imprime as linhas de um arquivo com seu comprimento [fechado]

  • exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • Dividir por delimitador e concatenar problema de string

  • MySQL Select com função IN () com array bash

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