什么是 duckscript?
是一种类似 Shell 的脚本语言,但是嵌入在 cargo make 里。官网在:https://sagiegurari.github.io/duckscript。项目目录在:https://github.com/sagiegurari/duckscript。
cargo make 是什么?
是一个 Rust 的任务运行器,以及构建软件。功能与 Gnu/Make 类似。项目目录在:https://github.com/sagiegurari/cargo-make。
duckscript 的特点是?
简单,可扩展,内嵌。
如何安装?
用 cargo 安装,或者下载项目发布的二进制程序。
怎么写 Hello world?
# hello.ds
echo Hello world
$ duck hello.ds
duck 是 duckscript 的解释器。
echo
有几个参数?
两个,Hello
和 world
。它们都是字符串。
如何创建变量?
out = set "Hello world!"
out
是一个变量,值是字符串 "Hello world!"
。
如何使用变量?
name = set Alice
echo Hello ${name}
set
是个特殊的语法吗?
不,它只是 duckscript 的 SDK 中的一个命令。是 std::var::Set
的别名。跟 echo
地位是一样的。
还有哪些常见的命令?
- 控制流程:
function
、if
、for
、goto
。 - 文件系统:
mv
、cp
、cat
、chmod
。 - 数学运算:
calc
。 - 字符串:
trim
、split
、replace
、length
、equal
、concat
等。 - 数据结构:
- 数组:
array
、array_get
、array_push
、is_array
等。 - 字典:
map
、map_get
、map_put
、is_map
等。 - 集合:
set_new
、set_contains
、set_put
、is_set
等。
- 数组:
- 进程控制:
exec
、exit
、spawn
。
详见:https://github.com/sagiegurari/duckscript/blob/master/docs/sdk.md。
duckscript 除了命令还有什么?
有预处理过程。
!include_files <file1> <files2> ...
可以用来拆分脚本。!print
在预处理过程中打印数据。
如何在 Rust 里内嵌 duckscript?
use duckscript::runner;
use duckscript::types::runtime::Context;
fn main() {
// 新建上下文
let mut context = Context::new();
// 在此上下文加载 SDK
let _ = duckscriptsdk::load(&mut context.commands);
// 运行一个脚本
//
// # hello.ds
// name = set Alice
// echo Hello, ${name}
let result = runner::run_script_file("hello.ds", context);
// 成功时返回运行后的上下文。
let new_context = match result {
Ok(context) => context,
Err(error) => {
eprintln!("duckscript error: {}", error);
return;
}
};
// 运行字符串,此时的上下文里已经有了 name 这个变量。
let _ = runner::run_script("echo Name is ${name}", new_context);
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于