Esta es una pregunta realmente específica. Tengo un script que, por lo que parece, podría haberlo hecho más complicado de lo necesario en nombre de la eficiencia. ¿Es realmente eficiente? No lo sé. ¿Es la forma correcta de escribirlo? No lo sé.
Es por eso que estoy haciendo esta pregunta, quiero saber si el código a continuación se puede mejorar de cómo está escrito es la forma de escribirlo. Si no estaba claro, soy un novato en golpear pero mi guión completa su propósito.
Este código está tratando de definir las variables s$counter= s1, s2, s3, s4...
en términos de las variables definidas previamente s1$j
y s2$j
con j
una cadena que es un elemento de una lista (todas definidas previamente).
counter=1
for j in ${list[@]}
do
eval s$counter=$(eval "echo \$s1$j")
eval s$((counter+1))=$(eval "echo \$s2$j")
counter=$((counter+2))
done
Es confuso, pero desnudo conmigo. El eval
significado interno significa $(eval "echo \$s1$j")
devolver el valor de s1$j
. El segundo eval
, que significa evaluar, s$counter =...
está destinado a definir las variabless1, s2, s3, s4 ...
Entonces, un ejemplo sería: digamos que para el primer bucle foor j=a
entonces $(eval "echo \$s1$j") == $s1a
, con el valor de s1a
definido anteriormente en el script, por ejemplo, que sea " s1a=10
", para que cuando eval
se evalúe el segundo tengamos el comando que dice " s1=10
".
Funciona, pero ¿podría pasar algo que haga de esto una posible amenaza de memoria o algo así?
La misma idea con esta línea de código.
eval $(echo "sed -i '$(eval echo '17i$sed17line')' $file")
donde sed17line
es lo que quiero agregar en la línea 17 de file
. Depende de para qué quiero usar el script, por eso lo estoy usando como variable y, por lo tanto, por qué estoy usando una combinación de echo
y eval
.
Una vez más, intenté todo lo que podía pensar que tenía sentido hasta que el resultado fue lo que quería.
Solo quiero asegurarme de que todo esté correcto y, si hay una manera de mejorarlo, debería buscar esa información. ¡Gracias!