Shell Scripting: вычислить мощность числа с реальным числом в качестве показателя

Я использую shell-скрипты, и я использую следующее выражение:

A=`echo "(( (($a / $b) ^ 0.3) -1 ))" |bc -l` 

Я хочу иметь действительное число в качестве экспоненты. Я заметил, что если я помещаю 0,3, он округляется до целого и принимает силу нуля. Аналогично, если я использую 5.5 или 5.9 вместо 0,3 в приведенном выше выражении, я получаю тот же ответ.

Как рассчитать мощность числа с показателем, являющимся действительным числом, а не целым числом

  • Сценарий оболочки для проверки наличия специальных символов и блокировки специальных файлов
  • Как сделать обратный вывод, который уже передан из команд сортировки и вырезания
  • Что означает `1 >>` и `2 >>` в сценарии bash?
  • Выход из функции bash, а не терминала
  • Как передать переменную в скрипте через терминал при выполнении abc.sh
  • Что означает $ {1: 0: 2} в этом контексте?
  • Проблема при запуске скрипта на хосте после подключения
  • if then else
  • 3 Solutions collect form web for “Shell Scripting: вычислить мощность числа с реальным числом в качестве показателя”

    Почему вы не можете использовать awk или perl one-liner для его обработки?

     echo "$a $b" | awk '{ print ((($1/$2)^0.3) -1); }' 

    Боюсь, вы не можете использовать bc для этого. Он не поддерживает показатели с плавающей запятой. Как объясняется в man bc :

    expr ^ expr

    Результатом выражения является значение первого, поднятого во второе. Второе выражение должно быть целым числом . […]

    Таким образом, вам придется использовать что-то еще, например awk :

     awk -va="$a" -vb="$b" 'BEGIN{print ((a/b)^0.3)-1}' 

    или, как предложил Деннис Джейкоб:

     echo "$a $b" | awk '{print ((($1/$2)^0.3) -1);}' 

    Или perl :

     perl -le 'print ((($ARGV[0]/$ARGV[1])**0.3)-1)' "$a" "$b" 

    или

     echo "$a $b" | perl -lane 'print ((($F[0]/$F[1])**0.3) -1)' 

    Вы можете использовать r вместо bc:

     A=$(echo "x=( ( ($a / $b) ** .3 ) -1 );print (x)" | r) 

    но, конечно, больше языков программирования может решить эту проблему.

    Interesting Posts

    Обнаружение общедоступного IP-адреса серверов и разрешение удаленного доступа

    Почему эта операция переименования не работает?

    В чем основные отличия между BSD- и Linux-операционными системами?

    Невозможно получить данные DBUS для автоматического изменения состояния pidgin

    Как создать псевдоним для сетевого устройства?

    Почему «aptitude markauto» удаляет мой пакет?

    Отладка отказа ACPI

    Обоснование найти отображение команды. каталог

    Использование головы и хвоста для захвата различных наборов строк и сохранения в один файл

    SVN добавляет скрытые файлы и фиксирует их через скрипт bash

    Появляется и исчезает «chkproc: Warning: Возможный LKM-троян»

    «Ssh -L <port>» работает только с локальной машины

    Не удается подключиться к беспроводному соединению NetworkManager

    Не удается удалить модуль iwlwifi, хотя интерфейс не работает

    Как сравнивать числа в последовательных строках в файле с помощью awk

    Linux и Unix - лучшая ОС в мире.