echo (shell) and C language

echo (shell) and C language

本文关键字:language and shell echo      更新时间:2023-10-16

我有一个用C语言编写的程序。在这个程序中,我有一个整数变量QS。此变量的值在程序执行期间更改在这个用 C 编写的程序中,我想使用 echo 命令外壳显示这个变量 QS

我听说纸尿裤C的系统()功能让手使用终端或控制台

系统("echo $ QS")当我这样做时,变量 QS 无法识别,并且它不显示任何内容。

关于我该如何做到这一点,你有什么具体的答案吗?以及如何识别C语言中的变量?

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

提前感谢您的回答。

命令行管理程序无法访问程序变量值。您必须先将值设置到环境中。有不同的方法可以做到这一点。其中之一是(在 linux/unix 中工作)

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

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

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

你用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"具有与打印字符不同的整数表示形式。

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

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