C代码中的Bash命令

时间:2018-07-07 16:12:13

标签: 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)");
    system("echo ${a[*]}");
}

在上面的代码中,下面几行不显示任何内容

system("a=(a 9 8 4)");
system("echo ${a[*]}"); 

有什么主意吗?

2 个答案:

答案 0 :(得分:6)

两件事:

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

  • 的调用中不可见
  • 除此之外,system()内部调用/bin/sh,而不是/bin/bash/bin/sh在许多系统(如您的系统)上都是指向POSIX兼容shell的链接。 Array definitions are unfortunately not part of the POSIX shell language

答案 1 :(得分:3)

system通常运行POSIX shell(通常是破折号,而不是bash),并且每次调用都会启动一个新的shell进程,因此,如果您真的想从system开始bash并打印第二个bash命令第一个定义的数组,您需要类似system("bash -c 'a=(a 9 8 4); echo ${a[*]}'");的东西。