我需要传递一个参数,该参数每次都会从C程序更改为shell脚本。
int val=1234;
char buf[100];
sprintf(buf,"echo %d",val);
system("call.sh $buf");
call.sh ::
#!/bin/sh
echo "welcome"
echo $*
echo "done"
C的输出是::
welcome
done
我无法在脚本中看到参数值1234。任何人都可以建议我获得正确的价值......
答案 0 :(得分:2)
您不能将C变量作为shell变量传递。您需要在字符串中构建整个命令行,然后将其传递给system(...)
int val=1234;
char buf[100];
sprintf(buf, "call.sh %d", val);
system(buf);
答案 1 :(得分:0)
您应该使用setenv()
,getenv()
或putenv()
函数(在stdlib.h
中定义)。引用man
:
如果name尚不存在,
setenv()
函数会将变量名称添加到具有值value的环境中。如果环境中存在name,则如果overwrite为非零,则其值将更改为value;如果overwrite为零,则不更改name的值。此函数复制由名称和值指向的字符串(与putenv(3)
形成对比)。
该功能的原型如下:
int setenv(const char *name, const char *value, int overwrite);