Как я могу сделать разделение с переменными в оболочке Linux?
когда я запускаю команды в моей оболочке, как показано ниже, он возвращает expr: non-integer argument
ошибка. Может кто-нибудь объяснить мне это?
$ x=20
$ y=5
$ expr x / y
expr: non-integer argument
6 ответов:
эти переменные являются переменными оболочки. Чтобы развернуть их в качестве параметров в другую программу ( ie
expr
), вам нужно использовать$
префикс: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))