转义shell命令中的文件名 我编写C++代码,生成一个shell脚本,创建目录和拷贝文件给它们。可以使用任何可能的允许字符组合文件/目录名。我需要转义那些文件/目录名。我需要的脚本是可读的人,所以我想使用尽可能少的转义,甚至引用。例如: mkdir \a\b\c

转义shell命令中的文件名 我编写C++代码,生成一个shell脚本,创建目录和拷贝文件给它们。可以使用任何可能的允许字符组合文件/目录名。我需要转义那些文件/目录名。我需要的脚本是可读的人,所以我想使用尽可能少的转义,甚至引用。例如: mkdir \a\b\c,c++,linux,shell,C++,Linux,Shell,或 比 mkdir abc 目录/文件名甚至可以包含\n、\r和\t个字符。我还没有弄明白如何从命令行创建这样一个名称的文件 您能帮我编写“mkdir_命令”功能吗 std::string mkdir_command(const char * buf, size_t size) { // Buf can contain anything! // It generates "mkdir ..." command which can be used in a shell scri

mkdir abc
目录/文件名甚至可以包含\n、\r和\t个字符。我还没有弄明白如何从命令行创建这样一个名称的文件

您能帮我编写“mkdir_命令”功能吗

std::string mkdir_command(const char * buf, size_t size) {
    // Buf can contain anything! 
    // It generates "mkdir ..." command which can be used in a shell script.
    // The function throws only in case there is a character ...
    // ... which is not allowed in the directory name, like '/' or 0.
}

有没有不可用的理由?是的,有理由认为mkdir“$(printf'foo\nbar\rand\tother\bstrange characters')”是我所知道的最简单的可移植方式。我想问一下unix.se,我认为shell专家在那里更常见。关于处理这类文件,似乎有很多问题,但不是如何创建它们。你需要知道你的目标是什么shell,知道它认为什么字符“特殊”,需要转义。然后,您需要迭代您的路径,识别这些特殊字符,并使用转义将它们添加到输出字符串中。所有其他字符按原样添加到输出字符串。@AlexanderSantos。原始字符串是一种C++特性,可以避免字符串字符串中的泄漏。这里我们有两个问题,首先知道要生成什么,以便正确地为shell而逃脱(并且因为我不相信我的建议是最好的),然后在C++中生成它(因为如果有特定的问题,我们可以帮助OP)。
std::string mkdir_command(const char * buf, size_t size) {
    // Buf can contain anything! 
    // It generates "mkdir ..." command which can be used in a shell script.
    // The function throws only in case there is a character ...
    // ... which is not allowed in the directory name, like '/' or 0.
}