相关疑难解决方法(0)

Bash中单引号和双引号之间的区别

在Bash中,单引号('')和双引号("")之间有什么区别?

syntax bash shell quotes

501
推荐指数
6
解决办法
17万
查看次数

传递包含"!!!!"的字符串时argv的奇怪行为

我写了一个小程序,从中获取一些输入参数*argv[]并打印它们.几乎在所有用例中,我的代码都运行得很好.只有在我想要作为参数传递的字符串末尾使用多个感叹号时才会出现问题...

这有效:

./program -m "Hello, world!"
Run Code Online (Sandbox Code Playgroud)

这不起作用:

./program -m "Hello, world!!!!"
Run Code Online (Sandbox Code Playgroud)

^^如果我这样做,程序输出要么是该字符串的两倍,要么是我在./program之前输入的命令.

但是,我绝对不明白:以下,奇怪的是,它的工作原理:

./program -m 'Hello, world!!!!'
Run Code Online (Sandbox Code Playgroud)

^^输出正是......

Hello, world!!!!
Run Code Online (Sandbox Code Playgroud)

......正如所希​​望的那样.

所以,我的问题是:

  • 为什么在字符串中使用多个感叹号时会出现这种奇怪的行为?
  • 据我所知,在C语言中,你使用的""是字符串和''单个字符.那么为什么我在使用时会得到所需的结果'',而不是在""我应该使用时(根据我的理解)?
  • 我的代码中是否有错误或者我需要更改哪些内容才能输入任何字符串(无论是否,使用了什么,以及使用了多少个标点符号)并准确打印出该字符串?

我的代码的相关部分:

// this is a simplified example that, in essence, does the same 
// as my (significantly longer) code
int main(int argc, char* argv[]) {
    char *msg = (char *)calloc(1024, sizeof(char));

    printf("%s", strcat(msg, argv[2])); // argv[1] is "-m"

    free(msg);
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试先将内容复制argv[2]char*缓冲区中并附加一个缓冲区 …

c bash quotes argv

31
推荐指数
3
解决办法
2507
查看次数

标签 统计

bash ×2

quotes ×2

argv ×1

c ×1

shell ×1

syntax ×1