for k in {0..49};
do
a=$(($((2*$k))+1));
echo $a;
done
Hola, necesito una expresión simplificada para la tercera línea, tal vez una que no use la sustitución de comandos.
for k in {0..49};
do
a=$(($((2*$k))+1));
echo $a;
done
Hola, necesito una expresión simplificada para la tercera línea, tal vez una que no use la sustitución de comandos.
bash
y noC
, así que elimine todo;
, a menos que lo escriba en una línea singular.declare -i a; for k in {0..49}; do a=2*$k+1; echo $a; done
$(( ... ))
es la expansión aritmética, no la sustitución de comandos.Respuestas:
Usando la expansión aritmética:
Usando la
expr
utilidad anticuada :Uso
bc -l
(en-l
realidad no es necesario en este caso, ya que no se utilizan funciones matemáticas):Utilizando
bc -l
como un coproceso (actúa como una especie de servicio de computación en segundo plano¹):Ese último se ve (posiblemente) más limpio en
ksh93
:¹ Esto resolvió un problema para mí una vez donde necesitaba procesar una gran cantidad de entrada en un bucle. El procesamiento requirió algunos cálculos de coma flotante, pero el desove
bc
algunas veces en el ciclo resultó ser extremadamente lento. Sí, podría haberlo resuelto de muchas otras maneras, pero estaba aburrido ...fuente
Puedes simplificar:
a:
fuente
Puede usar el
let
comando para forzar un cálculo.Tenga en cuenta que no necesitamos
$k
en esta estructura; Un simplek
hará el trabajo.fuente
a=2whateverk+1
en el directorio actual. Peor aún, si hay un archivo llamadoa=2+b[$(reboot)]k+1
, eso llama alreboot
comando. Lo mejor es usar((...))
aquí (((a = 2 * k + 1))
), o la sintaxis POSIX:a=$((2 * k + 1))
let a="2*k+1"
para resolver esoLa expansión aritmética que probablemente necesite es esta:
De hecho, no necesita usar una variable:
O la variable de conteo podría moverse a un
for ((…))
ciclo:en bucle
Y, en ese caso, la expansión aritmética también podría moverse dentro del ciclo for:
O, para obtener todos los valores en una matriz:
Sin formula
Pero probablemente la forma más corta de evitar cualquier expansión aritmética es incrementar una variable dos veces:
O, incluso más simple, simplemente use seq:
fuente