Это действительно конкретный вопрос. У меня есть сценарий, который, судя по всему, мог бы сделать это более сложным, чем необходимо, во имя эффективности. Это действительно эффективно? Я не знаю. Это правильный способ написания? Я не знаю.
Вот почему я задаю этот вопрос, я хочу знать, можно ли улучшить приведенный ниже код, как он написан. Если неясно, я новичок в 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
.
Опять же, я просто попробовал все, что мог придумать, чтобы это имело смысл, пока результат не достиг того, чего я хотел.
Я просто хочу убедиться, что все правильно, и если есть способ улучшить это, где я должен искать эту информацию. Спасибо!