Смотрите на круг дьявола, приложение, записанное для разрешения такой настройки на GNOME 2.
Обратите внимание, что, если/когда Вы перемещаетесь в GNOME 3, вещи могли бы работать очень по-другому …
Val=$(./a.out)
Val=`a.out`
Оба из них выполнятся a.out
и сохраните вывод в Val
.
Принятие удара или совместимой оболочки.
Вот Ваш код, переведенный в сценарий, который должен работать с ударом или ksh:
#!/bin/bash
# set min to some garbage value
min=1
N=$1
n=$2
for (( i=1; i<=$N; i++ )); do
for (( j=1; j<=$n; j++ )); do
val=$(/path/to/a.out)
if (( $val < $min )); then
min=$val;
fi
done
arr=("${arr[@]}" "$min")
done
# Then I want to calculate the sum of the elements of the array 'arr'.
sum=0
for (( l=0; l<${#arr[@]}; l++ )); do
sum=$( expr $sum + ${arr[$l]} )
done
echo "Sum of \$arr = ${sum}"
Теперь, это - фактический перевод Вашего кода. Можно хотеть измениться, как Вы присваиваете значения в $arr массива, поскольку Вы продвигаете $min на массив и не $val, и если $val является меньше, чем $min, то Вы изменяете значение продвижения $min к тому из $val (пока нижнее значение $val не найдено в последующем повторении цикла).
bc
или что-то, чтобы сделать это, поскольку удар не может врожденно обработать плавания. или Вы могли использовать Perl для записи сценария.
– Tim Kennedy
08.11.2011, 19:15
#!/bin/bash
# define as first and second parameter for script:
N=$1
n=$2
# declare as array:
declare -A arr
k=0
min=7 # some garbage value
# for-loop with variable: Use 'seq'
for i in $(seq 1 $N)
# do...done - not curly braces:
do
for j in $(seq 1 $n)
do
# already explained
val=$(./a.out)
# arithmetic evaluation in double parens:
if (( val < min ))
then
min=$val
fi
done
arr[$k]=$min
k=$((k+1))
done
array=${arr[*]}
addition=${array// /+}
echo $((addition))
Благодарность Gilles для полезной подсказки в комментарии.
${arr[$k]}=$min
должен быть arr[$k]=$min
. Или Вы пытаетесь присвоить переменной, имя которой хранится в массиве?
– Gilles 'SO- stop being evil'
08.11.2011, 01:44