将一个整数从C传递给shell脚本

时间:2013-10-30 19:19:53

标签: shell integer arguments

我需要传递一个参数,该参数每次都会从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。任何人都可以建议我获得正确的价值......

2 个答案:

答案 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);