Этот код суммирует обе переменные! Поместите его в свою функцию
var y = parseInt(document.getElementById("txt1").value);
var z = parseInt(document.getElementById("txt2").value);
var x = (y +z);
document.getElementById("demo").innerHTML = x;`
Вам нужно использовать переменное направление:
SAMPLE1='1-first.with.custom.name'
SAMPLE2='2-second.with.custom.name'
for (( i = 1; i <= 2; i++ ))
do
var="SAMPLE$i"
echo ${!var}
done
На странице Bash man в разделе «Расширение параметра»:
" Если первый символ параметра является восклицательным знаком (!), Вводится уровень переменной косвенности. Bash использует значение переменной, сформированной из остального параметра, как имя переменной, затем эта переменная расширяется и это значение используется в остальной части подстановки, а не как значение самого параметра. Это называется косвенным расширением.
blockquote>
Не является автономным ответом, просто добавлением к ответу Микеля, который я не мог хорошо вписать в комментарий.
Вы можете заполнить массив, используя цикл, оператор + = и документ здесь а также:
SAMPLE=()
while read; do SAMPLE+=("$REPLY"); done <<EOF
1-first.with.custom.name
2-second.with.custom.name
EOF
В bash 4.0 это так же просто, как
readarray SAMPLE <<EOF
1-first.with.custom.name
2-second.with.custom.name
EOF
Вы можете использовать eval
, как показано ниже:
SAMPLE1='1-first.with.custom.name'
SAMPLE2='2-second.with.custom.name'
for (( i = 1; i <= 2; i++ ))
do
eval echo \$SAMPLE$i
done
Не так далеко, насколько я знаю, сказали они, как сказал @ johnshen64. Кроме того, вы можете решить свою проблему, используя такой массив:
SAMPLE[1]='1-first.with.custom.name'
SAMPLE[2]='2-second.with.custom.name'
for (( i = 1; i <= 2; i++ )) do
echo ${SAMPLE[$i]}
done
Обратите внимание, что вам не нужно использовать числа, поскольку индексы SAMPLE[hello]
будут работать так же хорошо
SAMPLE=('1-first.with.custom.name' '2-second.with.custom.name')
или один на основе: SAMPLE=([1]='1-first.with.custom.name' '2-second.with.custom.name')
. Если хотите, вы можете разбить задание на несколько строк.
– Dennis Williamson
30 May 2012 в 18:55
Вы используете значение i , как если бы это был индекс массива. Это не так, потому что SAMPLE1 и SAMPLE2 являются отдельными переменными, а не массивом.
Кроме того, при вызове echo SAMPLE{$i}
вы добавляете значение i к слову "ОБРАЗЕЦ." Единственная переменная, которую вы разыгрываете в этом выражении, - $ i, поэтому вы получили результаты, которые вы сделали.
Существует два основных способа решения этой проблемы :
Самое простое в этом дело ситуация заключается в использовании eval :
SAMPLE1='1-first.with.custom.name'
SAMPLE2='2-second.with.custom.name'
for (( i = 1; i <= 2; i++ )); do
eval echo \$SAMPLE${i}
done
Это добавит значение i в конец переменной и затем обработает результирующую строку , расширяя имя интерполированной переменной (например, SAMPLE1 или SAMPLE2 ).
Принятый ответ для этого вопрос:
SAMPLE1='1-first.with.custom.name'
SAMPLE2='2-second.with.custom.name'
for (( i = 1; i <= 2; i++ ))
do
var="SAMPLE$i"
echo ${!var}
done
Это технически трехэтапный процесс. Во-первых, он присваивает имя интерполированной переменной var , затем разделяет имя переменной, хранящуюся в var , и, наконец, расширяет результат. Это выглядит немного чище, и некоторые люди более удобны с этим синтаксисом, чем с eval , но результат в основном тот же.
Вы можете упростить как цикл, так и расширение путем итерации по массиву вместо использования переменной интерполяции. Например:
SAMPLE=('1-first.with.custom.name' '2-second.with.custom.name')
for i in "${SAMPLE[@]}"; do
echo "$i"
done
Это добавило преимущества по сравнению с другими методами. В частности:
Все три метода будут работать для пример, заданный в исходном вопросе, но решение массива обеспечивает максимальную гибкость. Выберите тот, который лучше всего подходит для данных, которые у вас есть.
${parameter}
: «Если первым символом параметра является восклицательный знак (!), Вводится уровень переменной косвенности. Bash использует значение переменной, сформированной из остальной части параметра, как имя переменной; эта переменная затем расширяется и это значение используется в остальной части подстановки, а не значение самого параметра. Это известно как косвенное расширение. & Quot; – dogbane 30 May 2012 в 17:47