Это действительно конкретный вопрос. У меня есть сценарий, который, судя по всему, мог бы сделать это более сложным, чем необходимо, во имя эффективности. Это действительно эффективно? Я не знаю. Это правильный способ написания? Я не знаю.
Вот почему я задаю этот вопрос, я хочу знать, можно ли улучшить приведенный ниже код, как он написан. Если неясно, я новичок в bash, но мой сценарий выполняет свою задачу.
Этот код пытается определить переменные s$counter= s1, s2, s3, s4... в терминах ранее определенных переменных s1$j и s2$j где j - строка, являющаяся элементом списка (все определены ранее).
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
Это сбивает с толку, но со мной. Внутренний eval , означающий $(eval "echo \$s1$j") должен возвращать значение s1$j . Второй eval , то есть eval s$counter =... предназначен для определения переменных s1, s2, s3, s4 ...
Так что пример будет: скажем, для первого цикла jor j=a затем $(eval "echo \$s1$j") == $s1a , со значением s1a определенным ранее в скрипте, например, пусть оно будет « s1a=10 », так что когда вычисляется второе значение eval у нас есть команда, которая заявляет « s1=10 ».
Это работает, но может ли что-то случиться, что сделает это возможной угрозой памяти или что-то в этом роде?
Та же идея с этой строкой кода.
eval $(echo "sed -i '$(eval echo '17i$sed17line')' $file")
где sed17line - это то, что я хочу добавить в строку 17 file . Это зависит от того, для чего я хочу использовать скрипт, поэтому я использую его как переменную и, следовательно, почему я использую комбинацию echo и eval .
Опять же, я просто попробовал все, что мог придумать, чтобы это имело смысл, пока результат не достиг того, чего я хотел.
Я просто хочу убедиться, что все правильно, и если есть способ улучшить это, где я должен искать эту информацию. Спасибо!
