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


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

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

6 ответов:

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

expr $x / $y

причина, по которой он жаловался, заключается в том, что он думал, что вы пытаетесь работать с буквенными символами ( ie не целое число)

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

echo $((x / y))

или:

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

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

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

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

calc 7.5/3.2
  2.34375

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

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

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

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

почему бы не использовать 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

Для Ссылки На Переменные Bash Требуется Расширение Параметра

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

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

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

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

давайте

x=50
y=5

затем

z=$((x/y))

это будет работать должным образом . Но если вы хотите использовать / operator в операторах case, чем он не может его решить. enter code here В этом случае используйте простые строки, такие как div или devide или что-то еще. Смотрите код

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

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

убедитесь, что пробелы, как указано выше