Essa ideia me ocorreu com as atualizações recentes do Visual Studio Code, nas quais normalmente também verifico meu código automaticamente. Isto é o que eu vejo , então você pode ter uma ideia:
Essa questão é bem simples mesmo para quem pode testar em muitos shells, só tenho o Bash e o Dash instalados:
É possível para qualquer shell interpretar uma string com ponto decimal como um número (int, float)?
Obrigado pelo seu tempo.
ABSTENHA-SE de me dizer Por favor, não poste fotos de texto sobre esta questão específica. Você não veria o que me fez postar de outra forma, apenas com texto. E o conteúdo é irrelevante neste ponto, então discordo dele (imagens de texto) nesta questão. Saúde.
Se olharmos apenas para as principais famílias de shell do Unix, é a atribuição de variável escalar em shells do tipo Bourne, atribuição de variável em shells do tipo rc (todas as variáveis sendo listas e aqui uma lista com um valor), um erro em fish e executando o
var=value
comando em shells do tipo csh (mais sobre isso em Spaces em atribuições de variáveis em scripts de shell ).Naqueles em que é uma atribuição, para tentar tratar o valor dessa variável como um número, você precisa
$var
(ouvar
às vezes em shells do tipo Korn) ser usado em contextos que esperam um número ou expressões aritméticas.Como em (nem todos se aplicam a todos os shells)
Em shells do tipo Korn, incluindo
ksh
,bash
, ezsh
, se a variável foi declarada comtypeset -i var
, ou o mesmo com-E
,-F
ou-X
, ouinteger var
oufloat var
(não em bash/pdksh para os de ponto flutuante), ela é interpretada como um número na atribuição.192.168.0.40
não é um inteiro válido nem um número de ponto flutuante em qualquer base ou localidade.192.168
é um número de ponto flutuante válido em muitos contextos e pode ser um número inteiro válido em locais onde o separador de milhar é.
.192.168.123.123
(com sempre 3 dígitos por grupo, exceto o primeiro) seria o mesmo que192168123123
em localidades onde.
é o separador de milhar, portanto, poderia ser aceito como tal em contextos que esperam um número e onde separadores de milhar de localidade são aceitos.Conheço apenas as expressões aritméticas de ksh93 onde esse é o caso. Por exemplo:
Aqui em uma localidade italiana onde a vírgula é o caractere de base decimal e o ponto o separador de milhar.
Mas, em qualquer caso, desde que você não peça explicitamente que o conteúdo da variável seja interpretado como um número, como em todos os casos acima, ele não será interpretado como um número, o marcador de sintaxe do editor está apenas sendo enganoso, um shell é principalmente uma ferramenta para executar comandos, comandos sendo listas de argumentos de string¹, então as variáveis do shell por padrão normalmente contêm apenas strings ou listas de strings e cabe aos comandos que os shells executam interpretar essas strings como números, nomes de arquivo, nomes de usuário, endereços IP ou o que quiserem.
¹ sequências de 0 ou mais bytes diferentes de 0 para aquelas que são executadas por meio da
execve()
chamada do sistema, pois seu segundoargv[]
argumento é uma matriz de ponteiros para strings C (delimitadas por NUL).A partir do contexto dado não é possível determinar se essas variáveis possuem um tipo especificado, mas: