3 个版本
0.1.2 | 2023年6月2日 |
---|---|
0.1.1 | 2022年1月27日 |
0.1.0 | 2020年1月12日 |
#2746 在 命令行工具
13KB
151 行
类似于 Perl 的 quotemeta
函数的 Shell 引号。
在 Rust(或 Perl 或其他)中编写简单的 Shell 工具时,一个常用的习惯是输出一个 Shell 脚本或 Shell 片段供以后查看,或者直接将其管道输入到 Shell 中。然而,简单的 println!
如果文件名恰好包含 Shell 元字符,则会生成一个不正确且可能不安全的脚本。这包括并不罕见的空间字符。Perl 包含一个 quotemeta
函数,它通常可以完成这项工作。让我们正确地完成这项工作!
(实际上,你甚至不能 println!
一个普通的 Path
/PathBuf
,因为它们没有实现 Display
。)
此包提供了一个函数,该函数引用并转义文件名(或其他数据),以便可以进行插值。例如
use quotemeta::quotemeta;
fn main() {
for path in std::env::args_os().skip(1) {
println!("cat {}", quotemeta(path));
}
}
这将正常工作,即使文件名包含回车符,或是不有效的 UTF-8。