【问题标题】:echo (shell) and C languageecho (shell) 和 C 语言
【发布时间】:2012-09-17 04:48:49
【问题描述】:

我有一个用 C 语言编写的程序。在这个程序中,我有一个整数变量 QS。该变量的值在程序执行期间发生变化 在这个用 C 编写的程序中,我想使用 echo 命令 shell 显示这个变量 QS

听说纸尿裤C的system()函数可以使用终端或控制台

system ("echo $ QS") 当我这样做时,变量 QS 无法识别并且它什么也不显示。

您对我如何做到这一点有任何具体的答案吗?以及如何识别C语言中的变量?

我知道用一个简单的 printf,我可以显示这个变量,但我想要的是使用 echo。

提前感谢您的回答。

【问题讨论】:

  • 你不想使用 echo。只需使用 printf()。

标签: c++ c bash shell


【解决方案1】:

Shell 无法访问您的程序变量值。您必须先将值设置到环境中。有不同的方法可以做到这一点。其中之一是(适用于 linux/unix)

int main()  
{  
    char chProgramVar[] = "hello world" ;  
    setenv("ShellVar", chProgramVar, 1) ;  
    system("echo $ShellVar") ;  
}  

【讨论】:

    【解决方案2】:

    正如其他人所说,shell 无法访问您的程序变量。您可以使用sprintf 将值插入到您将使用system 执行的命令中:

    char command[BUFSIZ];
    
    sprintf(command, "echo %d", QS);
    system(command);
    

    【讨论】:

      【解决方案3】:

      您使用system(3) 调用生成的shell 不知道您的C 程序中的任何变量。做你想做的最简单的方法是将数据导出为环境变量。由于环境是通过调用system(3) 继承的,因此您只需使用setenv(3) 设置变量即可。但是,您必须先将其格式化为字符串:

      int QS = ...;
      char QSStr[32];  // Longest integer string is INT_MIN = -2147483648, assuming
                       // that sizeof(int) == 4
      snprintf(QSStr, sizeof(QSStr), "%d", QS);  // Convert to string
      setenv("QS", QSStr);  // Set the environment variable)
      ...
      system("echo $QS");  // Will print the value of QS
      

      【讨论】:

        【解决方案4】:

        您必须将数字格式化为字符字节。数字“4”作为打印字符有不同的整数表示。

        使用 printf 打印数字,或使用 sprintf 将其作为字符重新格式化到新缓冲区中。然后您可以使用系统回显(无论出于何种原因)打印新缓冲区。

        char s[16]; // might be too small
        sprintf(s, "%d", integer_var); 
        // s is the string  
        

        【讨论】:

        • 他说不想用printf
        • 该示例未使用 printf。
        • 但是您也没有展示如何使用echo 来做到这一点。您所做的只是将变量从整数更改为字符串。
        • 我认为系统回声调用在这个问题中没有很好的动机,它本身就是一个无用的调用。但无论值显示在哪里,都需要这样做。
        • 是的,这似乎是一个非常愚蠢的要求。但是,如果您要发布答案,它应该回答他提出的问题。非答案应作为 cmets 发布。
        猜你喜欢
        • 2022-01-10
        • 1970-01-01
        • 1970-01-01
        • 2013-11-25
        • 1970-01-01
        • 1970-01-01
        • 2020-07-25
        • 1970-01-01
        • 2013-09-16
        相关资源
        最近更新 更多