
什么是 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);
}
Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn
社区