Просто сделайте все ваши расчеты и выведите в awk:
float_scale=6
result=$(awk -v scale=$floatscale 'BEGIN { printf "%.*f\n", scale, 1/2 }')
В качестве альтернативы, если вы предпочитаете использовать bc
и не использовать AWK в одиночку или с помощью 'bc', Bash's printf
поддерживает числа с плавающей запятой, хотя остальная часть Bash не поддерживает.
result=$(echo "scale=$float_scale; $*" | bc -q 2>/dev/null)
result=$(printf '%*.*f' 0 "$float_scale" "$result")
Вторая строка выше может быть:
printf -v $result '%*.*f' 0 "$float_scale" "$result"
Это работает как sprintf
и не создает подоболочки.