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