c - 这是错误还是内存意外?

标签 c bash

这个问题在这里已经有了答案:





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/

相关文章:

linux - 无论 PID 结果如何,当从 ps 管道传输到 grep 时,Bash 脚本输出始终为 'ps'

bash - 将网络流量捕获为图像

c - 指针大小不正确

c - 如何将超出 long long int 范围的字符串转换为整数值

linux - 在 linux 中重命名一个附加了日期的文件

linux - 使用 "ps"查找某个时间范围内的进程

bash - 如果文件存在,则让 `unzip` 尝试解压文件,如果不存在则失败

c - 了解有关 C 'bomb' 的 x86 语法

c - 参数传递如何工作?

c - C 中 scanf 函数的格式说明符中 %c 规范之前的空格