2 个版本 (1 个稳定版)
1.0.0 | 2020 年 3 月 8 日 |
---|---|
0.1.0 | 2019 年 12 月 15 日 |
#1791 在 命令行工具
每月 23 次下载
24KB
437 行
qc
qc(简称 quick calc)是一个增强的逆波兰表示法(RPN)命令行工具,旨在辅助快速且简单的计算。
qc 对传统的 RPN 计算器进行了增强,包括在所有操作符前使用 :
,它会弹出之前所有的项目,执行操作,并将结果推回栈上。以下是一些示例。
安装
预构建的二进制文件
Linux、macOS 和 Windows 的预构建二进制文件可以在 发布页面 上找到。
您可以使用以下命令下载 Linux、MacOS 或 Windows 的最新二进制文件,只需将 DEST
替换为您希望安装 qc
二进制文件的目录
curl --proto '=https' --tlsv1.2 -sSf \
https://raw.githubusercontent.com/rrybarczyk/qc/master/bin/install \
| bash -s -- --to DEST
Cargo
qc
使用 Rust 编写,可以从源代码构建并使用 cargo install qc
安装。要获取 Rust,请使用 rustup 安装程序。
操作
二进制操作符
add
弹出栈顶的两个项目,将它们相加,并将和推回栈上sub
弹出栈顶的两个项目,将它们相减,并将差推回栈上mul
弹出栈顶的两个项目,将它们相乘,并将积推回栈上div
弹出栈顶的两个项目,将它们相除,并将商推回栈上:
弹出栈上的所有项目,使用二进制操作符折叠栈上的值,并将结果推回栈上
一元操作符
.
弹出栈顶的项目并打印它pop
弹出栈顶的项目endian
从栈中弹出顶部元素,交换字节序,并将结果压入栈中:<一元运算符>
将一元运算符映射到当前栈元素上
示例
传统的RPN功能
加法
$ qc 1 2 add
Script Stack Details
[ ]
1 [ 1 ]
2 [ 1 2 ]
add [ 3 ] 1 + 2
$ qc 1 2 3 add add
Script Stack Details
[ ]
1 [ 1 ]
2 [ 1 2 ]
3 [ 1 2 3 ]
add [ 1 5 ] 2 + 3
add [ 6 ] 1 + 5
减法
$ qc 1 2 sub
Script Stack Details
[ ]
1 [ 1 ]
2 [ 1 2 ]
sub [ -1 ] 1 - 2
$ qc 1 2 3 sub sub
Script Stack Details
[ ]
1 [ 1 ]
2 [ 1 2 ]
3 [ 1 2 3 ]
sub [ 1 -1 ] 2 - 3
sub [ 2 ] 1 - -1
乘法
$ qc 1 2 mul
Script Stack Details
[ ]
1 [ 1 ]
2 [ 1 2 ]
mul [ 2 ] 1 * 2
$ qc 1 2 3 mul mul
Script Stack Details
[ ]
1 [ 1 ]
2 [ 1 2 ]
3 [ 1 2 3 ]
mul [ 1 6 ] 2 * 3
mul [ 6 ] 1 * 6
除法
$ qc 3 9 div
Script Stack Details
[ ]
3 [ 3 ]
9 [ 3 9 ]
div [ 0.5 ] 3 / 9
$ qc 1 2 3 div div
Script Stack Details
[ ]
1 [ 1 ]
2 [ 1 2 ]
3 [ 1 2 3 ]
div [ 1 6 ] 2 * 3
div [ 6 ] 6 * 1
其他
$ qc 4 7 9 add 2 8 mul mul mul
Script Stack Details
4 [ 4 ]
7 [ 4 7 ]
9 [ 4 7 9 ]
add [ 4 16 ] 7 + 9
2 [ 4 16 2]
8 [ 4 16 2 8 ]
mul [ 4 16 16 ] 2 * 8
mul [ 4 256 ] 16 * 16
mul [ 1024 ] 4 * 256
$ qc 4 7 9 add 2 8 mul mul 4 div sub
Script Stack Details
4 [ 4 ]
7 [ 4 7 ]
9 [ 4 7 9 ]
add [ 4 16 ] 7 + 9
2 [ 4 16 2]
8 [ 4 16 2 8 ]
mul [ 4 16 16 ] 2 * 8
mul [ 4 256 ] 16 * 16
4 [ 4 256 4]
div [ 4 64 ] 256 / 4
sub [ -60 ] 4 - 64
$ qc 4 7 9 add add 2 3 5 mul mul mul 1 1 sub sub 20 5 div div .
Script Stack Details
4 [ 4 ]
7 [ 4 7 ]
9 [ 4 7 9 ]
add [ 4 16 ] 7 + 9
add [ 20 ] 4 + 16
2 [ 20 2 ]
3 [ 20 2 3 ]
5 [ 20 2 3 5 ]
mul [ 20 2 15 ] 3 * 5
mul [ 20 30 ] 2 * 15
mul [ 600 ] 20 * 30
1 [ 600 1 ]
1 [ 600 1 1 ]
sub [ 600 0 ] 600 - 1
sub [ 600 ] 600 - 0
20 [ 600 20 ]
5 [ 600 20 5 ]
div [ 600 4 ] 20 / 5
div [ 150 ] 600 / 4
> dec: 150 hex: 0x96 oct: o226 bin: b10010110
增强的RPN功能
$ qc 4 7 9 :add 2 3 5 :mul 1 1 :sub 20 5 :div .
Script Stack Details
4 [ 4 ]
7 [ 4 7 ]
9 [ 4 7 9 ]
:add [ 20 ] 4 + 7 + 9
2 [ 20 2 ]
3 [ 20 2 3 ]
5 [ 20 2 3 5 ]
:mul [ 600 ] 20 * 2 * 3 * 5
1 [ 600 1 ]
1 [ 600 1 1 ]
: sub [ 600 ] 600 - (1 - 1)
20 [ 600 20 ]
5 [ 600 20 5 ]
:div [ 150 ] 600 / (20 / 5)
> dec: 150 hex: 0x96 oct: o226 bin: b10010110
$ qc 0xa xb o22 b1101 :.
> dec: 13 hex: 0xd oct: o15 bin: b1101
> dec: 18 hex: 0x12 oct: o22 bin: b10010
> dec: 11 hex: 0xb oct: o13 bin: b1011
> dec: 10 hex: 0xa oct: o12 bin: b1010
打印
弹出栈顶元素并打印。
$ qc 1 2 3 add add .
> dec: 6 hex: 0x6 oct: o6 bin: b110
$ qc 32 8 div .
> dec: 4 hex: 0x4 oct: o4 bin: b100
$ qc 1 2 3 :add 4 5 :mul .
> dec: 120 hex: 0x78 oct: o170 bin: b1111000
$ qc 0xa . xb . o22 . b1101 .
> dec: 10 hex: 0xa oct: o12 bin: b1010
> dec: 11 hex: 0xb oct: o13 bin: b1011
> dec: 18 hex: 0x12 oct: o22 bin: b10010
> dec: 13 hex: 0xd oct: o15 bin: b1101
$ qc 0xa xb o22 b1101 :.
> dec: 13 hex: 0xd oct: o15 bin: b1101
> dec: 18 hex: 0x12 oct: o22 bin: b10010
> dec: 11 hex: 0xb oct: o13 bin: b1011
> dec: 10 hex: 0xa oct: o12 bin: b1010
字节序交换
要交换值的字节序,还需要宽度: $ qc <value> <byte width> endian
.
$ qc 0xdeadbabe 4 endian .
> dec: 3199905246 hex: 0xbebaadde oct: o27656526736 bin: b10111110101110101010110111011110
$ qc 0xdeadbabe 2 endian .
> dec: 3735928506 hex: 0xdeadbeba oct: o33653337272 bin: b11011110101011011011111010111010
$ qc 0xe803000000000000 0xd007000000000000 8 :endian :.
> dec: 2000 hex: 0x7d0 oct: o3720 bin: b11111010000
> dec: 1000 hex: 0x3e8 oct: o1750 bin: b1111101000
$ qc 0x1234000000000000 0x5678000000000000 8 :endian :.
> dec: 30806 hex: 0x7856 oct: o74126 bin: b111100001010110
> dec: 13330 hex: 0x3412 oct: o32022 bin: b11010000010010
待办事项
- 十六进制、八进制和二进制格式化打印
- 所有栈元素的字节序交换和格式化打印
- 所有栈元素的哈希
qc 0x00000000000003e8 0x00000000000007d0 :sha256d
- 连接所有栈元素并进行哈希
qc 0x00000000000003e8 0x00000000000007d0 :cat sha256d
字符指南
安全
SPACE
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789
@[]^_{}+,-./:
危险
\`|~<>"'#&()*;? TAB
可疑
{}!%=
~ - can use if not first character in a line
$ - on its own can be an operator, but not in fish
% - used for job control than zsh
= _ zsh ? is not ok
依赖
~3MB
~51K SLoC