/ / por qué el número entero da como resultado 0 cuando cambio el número entero declarado a cadena en el script Bash - bash

¿Por qué el entero resulta en 0 cuando cambio entero declarado a cadena en el guión de Bash? bash

Código:

#!/bin/bash

declare -i number
# The script will treat subsequent occurrences of "number" as an integer.

number=3
echo "Number = $number"     # Number = 3

number=three
echo "Number = $number"     # Number = 0
# Tries to evaluate the string "three" as an integer.

No puedo entender por qué number cambiado cuando asigno una cadena "three" a number. Yo creo que number Debería permanecer igual. Eso realmente me sorprendió.

Respuestas

2 para la respuesta № 1

Desde el declare Sección de man bash:

-i The variable is treated as an integer; arithmetic evaluation (see ARITHMETIC EVALUATION) is performed when the variable is assigned a value.

Desde el ARITHMETIC EVALUATION Sección de man bash:

The value of a variable is evaluated as an arithmetic expression when...a variable which has been given the integer attribute using declare -i is assigned a value. A null value evaluates to 0.

Juntos, estos establecen claramente que el comportamiento que usted está viendo es el comportamiento esperado. Cuando los personajes t h r e e Se evalúan aritméticamente, los resultados resultantes. null valor se evalúa como 0, que luego se asigna a la variable number.

Todas las asignaciones en bash se interpretan primero como cadenas. number=10 interpreta el 1 0 como cadena primero, lo reconoce como un entero válido y lo deja como está. number=three es tan sintácticamente y semánticamente válido como number=10, por lo que su script continúa sin ningún error después de asignar el valor evaluado de 0 a number.