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