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

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

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

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

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

  • Использовать файл в каталоге как аргумент, но без расширения
  • Что означает «пока:»?
  • если инструкция не работает должным образом
  • Как узнать, содержит ли PWD пробелы или буквы, отличные от английского?
  • Загрузка с динамически изменяющихся URL-адресов через скрипт
  • Вывод каждого столбца N из ввода
  • Изменить текст на звездочки на вкладке
  • Передача кликов по ссылкам в rxvt скрипту
  • 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) 

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

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