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

Когда я запускаю команды в своей оболочке, как показано ниже, она возвращает ошибку expr: non-integer argument. Может кто-нибудь, пожалуйста, объясните мне это?

$ x=20
$ y=5
$ expr x / y 
expr: non-integer argument

Ответ 1

Эти переменные являются переменными оболочки. Чтобы расширить их как параметры для другой программы (т.е. expr), вам нужно использовать префикс $:

expr $x / $y

Причина, по которой она жаловалась, состоит в том, что она думала, что вы пытаетесь работать с алфавитными символами (т.е. нецелыми)

Если вы используете оболочку Bash, вы можете добиться того же результата, используя синтаксис выражения:

echo $((x / y))

Или:

z=$((x / y))
echo $z

Ответ 2

Почему бы не использовать let; Мне это намного легче. Вот пример, который может оказаться полезным:

start=`date +%s`
# ... do something that takes a while ...
sleep 71

end=`date +%s`
let deltatime=end-start
let hours=deltatime/3600
let minutes=(deltatime/60)%60
let seconds=deltatime%60
printf "Time spent: %d:%02d:%02d\n" $hours $minutes $seconds

Ответ 3

Ссылка на Bash Переменные Требует расширения параметров

По умолчанию для большинства дистрибутивов Linux используется Bash. В Bash переменные должны использовать префикс знака доллара для расширения . Например:

x=20
y=5
expr $x / $y

Конечно, Bash также имеет арифметические операторы и специальный арифметический синтаксис расширения, так что нет необходимости ссылаться на двоичный код expr как отдельный процесс. Вы можете позволить оболочке выполнить всю работу следующим образом:

x=20; y=5
echo $((x / y))

Ответ 4

Я считаю, что это уже упоминалось в других потоках:

calc(){ awk "BEGIN { print "$*" }"; }

то вы можете просто ввести:

calc 7.5/3.2
  2.34375

В вашем случае это будет:

x=20; y=3;
calc $x/$y

или, если хотите, добавьте это как отдельный script и сделайте его доступным в $PATH, чтобы вы всегда имели его в своей локальной оболочке:

#!/bin/bash
calc(){ awk "BEGIN { print $* }"; }

Ответ 5

Вы можете использовать подстановку команд следующим образом:

z="$(expr $x / $y)"
echo "$z"

Удостоверьтесь, что места, указанные выше,