这个问题在这里已经有了答案:
Which characters need to be escaped when using Bash?
(7 个回答)
9 个月前关闭。
我编写了一个简单的 C 程序,它接受任意数量的文本参数并将它们回显出来。
int main(int argc, char*argv[]){
for (int i=1;i<argc;i++){
for (int j=0;j<strlen(argv[i]);j++){
printf("%c", argv[i][j]);
}
}
}
运行代码,它似乎按预期工作,例如$./echo hello world
hello world
但是如果我在输入中添加感叹号,它就会失控。$./echo hello world!!
hello world./echothehelloworld
我在末尾添加的感叹号越多,它就会以指数方式重复输出。
最佳答案
你需要转义你的论点,不加引号或双引号 !!
如果 history expansion,将被 shell 替换为您运行的最后一个命令已启用(默认情况下在交互式 shell 中)。除了引用 !
为了防止一个命令的历史扩展,你可以用 set +H
为当前 shell 禁用它。 .!!
的常见用法是使用 root 权限运行最后一个命令,如下所示:
$ whoami
marco
$ sudo !!
root
您的 C 代码很好,这将按预期工作(注意双引号):$ ./echo "hello world!!"
关于c - 这是错误还是内存意外?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66353565/