Вы можете поместить любую строку в переменную. Но вы не можете помещать пробелы вокруг знака равенства в присвоении:
adapter=/Volumes/My\ Passport/Documents/adapters.fa
или
adapter='/Volumes/My Passport/Documents/adapters.fa'
После этого определения вы можете использовать «$ adapter»
в оболочке для ссылки на этот файл. Обратите внимание на двойные кавычки - без них оболочка разделила бы значение на пробел .
open "$adapter"
Это определение адаптера
полезно только в оболочке. Например, вы не можете ввести $ adapter
в диалоговом окне открытия файла и заставить его отображать это значение. Если вы хотите определить ярлык для файла, который можно использовать везде, вы можете создать символическую ссылку в легкодоступном месте.
Вы можете уменьшить объем детализации при использованииbc
:
$ bc <<<"236-192"
44
$ bc <<<"1+1"
2
(при условии, что ваша оболочка поддерживает это ).
Если вы предпочитаете использовать это как функцию:
$ c() { printf "%s\n" "$@" | bc -l; }
$ c 1+1 22/7
2
3.14285714285714285714
(-l
включает стандартную математическую библиотеку и увеличивает масштаб по умолчанию до 20.)
Сохраните определение c
в вашем любимом файле запуска оболочки, если вы хотите сделать его всегда доступным.
Прежде чем были опубликованы какие-либо другие блестящие ответы, я создал сценарий /usr/local/bin/c
, содержащий:
#!/bin/sh
IFS=' ' # to be on the safe side, some shells fail to reset IFS.
if [ "$#" -eq 0 ]; then
echo "$(basename "$0"): a (very) simple calculator."
echo "type $(basename "$0") expression to evaluate (uses bc internally)"
fi
printf '%s\n' "$*" | bc -l # safe for most shells
# we may use 'bc -l <<<"$*"` for ksh, bash, zsh
c 1+1
дает 2
!:-)Примечание 1:Я использовал c
, потому что этой команды нет ни в одной системе Unix, которую я смог найти. Если бы вы использовали псевдоним для своего компилятора c, используйте что-нибудь короткое и то, что вы не используете.
Примечание 2:Источник
Читая комментарии к этой странице , я вижу программу UNIX/Linux под названием calc
, которая делает именно то, что вам нужно. Если на Debian/Ubuntu/производных:
sudo apt-get install apcalc
или в Fedora Linux:
sudo dnf install calc
тогда можно:
calc 236-192
и если вы добавите псевдоним alias c='calc'
к вашему .bashrc
или /etc/bash.bashrc
, то он просто станет:
c 1+1
в командной строке.
Вzsh
:
$ autoload zcalc # best in ~/.zshrc
$ zcalc
1> 1+1
2
2> ^D
$ zcalc 5+5
1> 10
2>
Что я делаю в zsh:
$ <<< $(( 236 - 192 ))
44
В bash мне пришлось бы явно указывать кота:
$ cat <<< $(( 236 - 192 ))
44
Если бы я хотел, чтобы результат включал цифры дробной части (работает в zsh, а не в bash ), я бы добавил точку счисления к одному из операндов
$ <<< $(( 236 / 128 ))
1
$ <<< $(( 236. / 128 ))
1.84375
Программа units
, хотя и не предназначена для использования в качестве калькулятора, на самом деле работает достаточно хорошо.
$ units "236-192"
Definition: 44
$
Если в выражении есть пробелы, то выражение должно быть заключено в кавычки -.
Он поддерживает экспоненты и глубокую вложенность скобок
Лично мне нравится libqalculate(командная -линейная версия Qalculate).
$ qalc
> 236-192
236 - 192 = 44
Хотя интерфейс, безусловно, прост, (lib )qalculate является мощным, полноценным -полноценным калькулятором. например.
> fibonacci(133) to hex
fibonacci(133) = approx. 0x90540BE2616C26F81F876B9
> 100!
factorial(100) = approx. 9.3326215E157
> sin(pi)
sin(pi * radian) = 0
Он также делает полезные вещи, такие как завершение табуляции, открытие/закрытие круглых скобок, когда это необходимо, и печатает свою интерпретацию запроса.
> 18-2)/4
(18 - 2) / 4 = 4
Чтобы выйти, я просто нажимаю Ctrl + d .
Для еще более быстрого доступа установите что-то вроде alias ca='qalc'
.
Если у вас установлен gradle, то у вас есть groovy...
Если путь к groovy указан правильно, вы сможете использовать:
groovy -e "println 1+1"
Это может показаться несколько избыточным по сравнению со всеми другими примерами, но:
Если у вас не установлена java, вероятно, не стоит устанавливать groovy и java --это просто вариант, если groovy уже доступен.
Как отмечалось в комментарии к более раннему ответу, стандартная оболочка (ba )sh позволяет вычислять арифметические выражения внутри $((...))
. Я не смог дважды -проверить, является ли это частью стандарта POSIX, но я проверил, работает ли он также на Cygwin и оболочке Mingw32.
Чтобы увидеть результат, вам действительно нужно набрать echo $((...))
, что делает некоторые символы более интерактивными, чем ()bc
. Однако для использования результата в сценарии это, скорее всего, будет короче, чем bc
решение (, которое может быть, например,`echo...|bc`
).
Что касается детализации, команда bc
допускает параметр -q
, который подавляет вывод «обычного приветствия GNU bc
» .
В качестве последнего, слегка пограничного замечания, отметим, что bc
— это не просто калькулятор, а полноценный -полноценный язык программирования (, включающий определяемые пользователем функции, циклы while & for и т. д. и т. д. ). Еще один факт, который наталкивает на мысль предпочесть сборку -с арифметическими возможностями для таких простых вычислений, а не внешней программой. Тем не менее, извлечение данных для заданного номера раздела (s )и работа с суффиксами «M», «G», как казалось в исходном вопросе, может потребовать (g)awk
а не bc
.
Источники:https://www.gnu.org/software/bc/manual/html_mono/bc.htmlhttps://www.gnu.org/software/gawk/manual/html_node/Getting-Started.html
Перечислено несколько решений (shell, awk, dc, perl, python и т. д. ).
Функция может быть определена с любой опцией (gawk кажется наиболее гибким в использовании)
c () { local in="$(echo " $*" | sed -e 's/\[/(/g' -e 's/\]/)/g')";
gawk -M -v PREC=201 -M 'BEGIN {printf("%.60g\n",'"${in-0}"')}' < /dev/null
}
И использовать как:
$ c 236- 192
44
Самый простейший расчет в CLI — это оболочка CLI ()сама (Если IFS
по умолчанию):
$ echo $(( 22 + 333 ))
355
Пробелы можно опускать:
$ echo $((22*333))
7326
Так как это часть POSIX , она есть почти во всех оболочках. И он включает большинство математических функций языка C (, за исключением того, что zsh имеет другой приоритет,установите C _PRECEDENCES, чтобы восстановить его до совместимого значения):
$ echo $((22*333^2))
7324
И некоторые оболочки имеют большую часть математического синтаксиса языка C (, включая запятую):
$ echo $((a=22,b=333,c=a*b,c))
7326
Но это только целочисленная математика (и обычно меньше 2 63 в современных ОС )в некоторых оболочках:
$ echo $((1234/3))
411
$ zsh -c 'echo $((2**63))'
-9223372036854775808
Некоторые оболочки могут выполнять математические операции с плавающей запятой:
$ ksh -c 'echo $((1234/3.0))'
411.333333333333333
$ ksh -c 'echo $((12345678901234567890123/3.0))'
4.11522630041152263e+21
Избегайте zsh (zcalc имеет аналогичные проблемы):
$ zsh -c 'echo $((12345678901234567890123 + 1))'
zsh:1: number truncated after 22 digits: 12345678901234567890123 + 1
-1363962815083169259
Я рекомендую вам избегать expr
, иногда нужны странные побеги:
$ expr 22 \* 333
7326
На следующем уровне находится(также POSIX)bc
(двоюродный брат RPNdc
)
$ echo '22*333' | bc
7326
$ echo '22 333 * p' | dc
7326
dc
исторически()использовался для реализации bc и был исключен из POSIX в 2017 году .
Короче, если ваша оболочка поддерживает это:
$ bc <<<'22*333'
7326
Или даже:
$ <<<'22*333' bc
7326
Оба являются калькуляторами произвольной точности с некоторыми внутренними математическими функциями:
$ bc <<<2^200
1606938044258990275541962092341162602522202993782792835301376
$ echo 's(3.1415/2)' | bc -l # sine function
.99999999892691403749
После этих действительно основных инструментов расчета вам нужно перейти к другим языкам
$ awk "BEGIN {print (22*33)/7}"
103.714
$ perl -E "say 22*33/7"
103.714285714286
$ python3 -c "print(22*33/7)"
103.71428571428571
$ php -r 'echo 22*33/7,"\n";'
103.71428571429
Вы можете определить функцию любой из вышеперечисленных опций:
c ()
{
local in="$(echo " $*" | sed -e 's/\[/(/g' -e 's/\]/)/g')";
gawk -M -v PREC=201 -M 'BEGIN {printf("%.60g\n",'"${in-0}"')}' < /dev/null
}
И использовать:
$ c 22* 33 /7 # spaces or not, it doesn't matter.
103.714285714285714285714285714285714285714285714285714285714
Пробовали ли вы конкальк ?
Description: console calculator concalc is a calculator for the Linux console. It is just the parser-algorithm of extcalc packed into a simple console program. You can use it if you need a calculator in your shell. concalc is also able to run scripts written in a C-like programming language.
$ concalc 1+1
2
$ concalc sqrt2
1.41421356237309505
Установить с помощью:
sudo apt-get install concalc
Создание одного -вкладыша:
$ c () { echo $(( ${1} )) }
Теперь вы можете использовать простую целочисленную математику:
$ c 1+1
2
$ c 25*4
100
$ c 25*4-10
90
$ c 20*5/4
25
Python открыт в другой вкладке?
Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 17:26:49) [MSC v.1900 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 3+3
6
>>>
Просто потому, что Python несколько раз упоминался в других ответах, вот обобщенный ответ, резюмирующий основную идею:
Вы можете использовать многие интерпретируемые языки с repl в качестве калькулятора. Это сэкономит вам время на изучение «специальной» программы, такой как bc
.
Например, если вы уже знаете lisp, вы можете использовать его в качестве быстрого и грязный калькулятор командной строки:
sbcl --eval '(progn (print (+ 1 2 3 4)) (quit))'
Или, например, Окамл:
echo "let d = 553 - 226 in print_int d" | ocaml -noprompt -stdin
Любой язык, который вы считаете наиболее удобным.
Здесь есть много отличных ответов, на самом деле я написал небольшой язык программирования с учетом этой проблемы, где при вводе в командной строке ./Ascal 2+2
или ./Ascal "log(10)"
вы сразу получите результат Окончательный ответ :4 для 2+2, и я уверен, что вы можете представить логарифмическую базу 10 из 10. Просто имейте в виду, что это также полноценный язык программирования с кучей встроенных полезных функций, построением графиков в консоли и вычислением сумм Реймана для определенных вами функций. Проверьте это, проект теперь поставляется со скриптом сборки, поэтому все, что вам нужно сделать, это добавить его в переменную пути или добавить псевдоним в конфигурацию bash, и у вас есть простой в использовании калькулятор!
https://github.com/andrewrubinstein/AscalLang
Я также был бы очень признателен за любые комментарии, которые могут быть у тех, кто достаточно заинтересован, чтобы проверить это, надеюсь, что это может быть полезно.
2020 ответ
Добавить
# Calc
c(){
echo "scale=2; $*" | bc -l
}
в свой ~/.aliases
, затем
$ c 1/3
.33
(Первоначальная проблема уже решалась несколько раз. Однако заголовок «Простая команда -линейный калькулятор» может потребовать деления до нескольких знаков после запятой. Использование опции -l
с bc
, по-видимому, дает 20 знаков после запятой, что, возможно, слишком много для «простого» калькулятора. Этот ответ, на который Франкенштейн отвечает от @stephenKitt и @sjas, был самым простым решением, которое я нашел.)