Je voudrais savoir si le code ci-dessous peut être amélioré ou si la façon dont il est écrit est la bonne. Si ce n'était pas clair, je suis un débutant en bash mais mon script remplit son rôle.
Ce code tente de définir les variables s$counter= s1, s2, s3, s4...
en fonction des variables définies précédemment s1$j
y s2$j
avec j
une chaîne de caractères qui est un élément d'une liste (toutes définies précédemment).
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
L'intérieur eval
, c'est-à-dire $(eval "echo \$s1$j")
es est censé renvoyer la valeur de s1$j
. Le deuxième eval
, c'est-à-dire l'évaluation s$counter =...
est destiné à définir les variables s1, s2, s3, s4 ...
Voici un exemple : disons que pour la première boucle avant j=a
puis $(eval "echo \$s1$j") == $s1a
avec la valeur de s1a
défini plus tôt dans le script, par exemple " s1a=10
"de sorte que lorsque le deuxième eval
est évaluée, nous avons le commandement qui dit " s1=10
".
Cela fonctionne, mais est-ce qu'il pourrait se produire quelque chose qui en ferait une menace pour la mémoire ou quelque chose de ce genre ?
Même chose avec cette ligne de code.
eval $(echo "sed -i '$(eval echo '17i$sed17line')' $file")
où sed17line
c'est ce que je veux ajouter à la ligne 17 de file
. Cela dépend de ce pour quoi je veux utiliser le script, c'est pourquoi je l'utilise comme une variable et c'est pourquoi j'utilise une combinaison de echo
y eval
.