我正在尝试使用 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[*]}");
有什么主意吗?
答案 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[*]}'");
的东西。