C代码中的Bash命令

C代码中的Bash命令,c,bash,C,Bash,我正在尝试使用C程序运行一些bash命令 #include<stdio.h> #include<stdlib.h> int main() { int j; char a[4]={'a','9','8','4'}; for (j=0;j<=3;j++) { printf("a[%d]=%c %p\n",j,a[j],&a[j]); } system("a=(a 9 8 4)");

我正在尝试使用C程序运行一些bash命令

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int j;
    char a[4]={'a','9','8','4'};
    for (j=0;j<=3;j++)
    {
        printf("a[%d]=%c      %p\n",j,a[j],&a[j]);
    }
    system("a=(a 9 8 4)");
    system("echo ${a[*]}");
}

有什么想法吗?

system
通常运行一个POSIX shell(通常是dash,而不是bash),每次调用都会启动一个新的shell进程,因此如果您真的想从
system
启动bash,并让第二个bash命令打印第一个命令中定义的数组,那么您需要类似于
system的东西(“bash-c'a=(a9 8 4);echo${a[*]}”
system
通常运行一个POSIX shell(通常是dash,而不是bash),每次调用都会启动一个新的shell进程,因此如果您真的想从
system
启动bash并让第二个bash命令打印第一个命令中定义的数组,那么您需要类似于
system的东西(“bash-c'a=(a9 8 4);echo${a[*]}”

两件事:

  • 每次调用
    system()
    时,都会调用一个新的shell。这意味着变量声明将只对当前调用的shell可见,而不会在随后调用
    system()

  • 除此之外,
    system()
    在内部调用
    /bin/sh
    ,而不是
    /bin/bash
    /bin/sh
    在许多系统(如您的系统)上都是指向兼容POSIX的shell的链接

    • 两件事:

      • 每次调用
        system()
        时,都会调用一个新的shell。这意味着变量声明将只对当前调用的shell可见,而不会在随后调用
        system()

      • 除此之外,
        system()
        在内部调用
        /bin/sh
        ,而不是
        /bin/bash
        /bin/sh
        在许多系统(如您的系统)上都是指向兼容POSIX的shell的链接


      system(“a=(a9 8 4);echo${a[*]}”)嗯。。。为什么打电话给bash?大多数bash命令都是用C实现的,您可以使用C API…系统直接调用它们(“a=(a9 8 4);echo${a[*]}”)Hmm。。。为什么打电话给bash?大多数bash命令都是用C实现的,您可以使用C API直接调用它们。。。
      system("a=(a 9 8 4)");
      system("echo ${a[*]}");