C không phải là ngôn ngữ của tôi lựa chọn, nhưng đây là những gì tôi đã đưa ra (phải trả lời cùng một câu hỏi, bản thân mình).
#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;
}
Với escape'this'
, nó sẽ ra 'escape'\''this'\'''
, có thể sau đó được chuyển tới echo
.
$ echo 'escape'\''this'\'''
escape'this'
hãy thử điều này bằng chuỗi: a'b. đối với tôi, echo 'a \' b '.... không hoạt động trong bash, nhưng echo' a '"'" 'b' hiện .... –
@ErikAronesty: Tôi đã nói thay thế ''' bằng ' '\' '', không phải với' \' '. –
Lưu ý rằng trích dẫn các kết quả ''' trong '' '\' ''', mà thực ra là một chuỗi gồm ba chuỗi được nối thêm vào đánh giá. Do đó, đây không phải là báo giá thực. – ManuelSchneid3r