#shell #escaping #la #perl #script #character #shell-quoting

quotemeta

类似于 Perl 的 quotemeta 函数的 Shell 引号

3 个版本

0.1.2 2023年6月2日
0.1.1 2022年1月27日
0.1.0 2020年1月12日

#2746命令行工具

MIT 许可证

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。

无运行时依赖

功能