首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C函数来转义shell命令参数的字符串?

C函数来转义shell命令参数的字符串?
EN

Stack Overflow用户
提问于 2010-09-08 14:45:46
回答 5查看 6.1K关注 0票数 10

在C中,我应该使用什么函数来转义shell命令参数的字符串?

  1. 我有一根绳子: This is a string with () characters
  2. 这将是错误: echo This is a string with () characters
  3. 这些都可以: echo "This is a string with () characters" echo This is a string with \(\) characters

C中是否有将#2转换为#3的预定义函数?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-09-08 16:22:49

'的所有实例替换为'\'',然后用单引号(')封装整个字符串是一种安全的方法。这甚至适用于嵌入的新行。另一种方法是在每个字符之前插入\,但必须对换行符进行一些特殊处理,因为\后面的换行符被shell忽略,而不是作为文字换行符来处理。您必须用' (单引号)包围换行符。

票数 9
EN

Stack Overflow用户

发布于 2010-09-08 15:08:56

没有预定义的函数。

不过,我认为只需将任何shell参数括在单引号中,并确保单引号被转义就足够了。

这就是PHP中越狱函数的逻辑,我相信它运行得相当好。

票数 3
EN

Stack Overflow用户

发布于 2012-08-07 21:44:02

C不是我所选择的语言,但我想出了一个问题(我自己也必须回答同样的问题)。

代码语言:javascript
复制
#include <stdio.h>     // sprintf
#include <stdlib.h>    // malloc
#include <string.h>    // strlen

char* escapeshellarg(char* str) {
    char *escStr;
    int i,
        count = strlen(str),
            ptr_size = count+3;

    escStr = (char *) calloc(ptr_size, sizeof(char));
    if (escStr == NULL) {
        return NULL;
    }
    sprintf(escStr, "'");

    for(i=0; i<count; i++) {
        if (str[i] == '\'') {
                    ptr_size += 3;
            escStr = (char *) realloc(escStr,ptr_size * sizeof(char));
            if (escStr == NULL) {
                return NULL;
            }
            sprintf(escStr, "%s'\\''", escStr);
        } else {
            sprintf(escStr, "%s%c", escStr, str[i]);
        }
    }

    sprintf(escStr, "%s%c", escStr, '\'');
    return escStr;
}

给定escape'this',它将输出'escape'\''this'\''',然后可以传递给echo

代码语言:javascript
复制
$ echo 'escape'\''this'\'''
escape'this'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3668928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档