C不是我选择的语言,但这里是我想出了(必须回答同样的问题,我自己)。
#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
。
$ echo 'escape'\''this'\'''
escape'this'
来源
2012-08-07 21:44:02
N13
用字符串试试这个:a'b。对于我来说,echo'a \'b'....在bash中不起作用,但是回声'a''''''''...... – 2014-01-03 17:55:26
@ErikAronesty:我说要用' '\''',而不是'\''。 – 2014-01-03 18:45:59
请注意,引用'''产生''''''',这实际上是一串三个字符串,它们在评估中被附加。因此这不是真实的引用。 – ManuelSchneid3r 2017-04-02 15:35:10