分页: 1 / 1
[已解决][问题]如何将一个变量值作为另一个变量的名称?
发表于 : 2008-07-21 21:00
由 Tobey
1 。[问题]如何将一个变量值作为另一个变量的名称?
比如:
$1=a
$2=b
......
$a=ok
$b=okay
假设我们不知道需要$a和$b哪个变量的值.只知道需要名称为$1的值的变量的值。
如何由$1 我们想要的值?
---------------------------------
2.
或者如何获得传递给1个函数的所有参数的值,前提是参数个数不定,编程者不知道会有几个,但需要在函数中处理所有参数。。
2个问题,任一解决即可。
发表于 : 2008-07-22 1:36
由 yjcong
同问, 还有, 如果是c++, 这个问题如何解决?
发表于 : 2008-07-22 10:08
由 79hy
这个问题比较常用,呵呵
shell :
a=abc;abc=kkkkkk;eval b=\$$a;echo $b
发表于 : 2008-07-22 10:09
由 BigSnake.NET
yjcong 写了:同问, 还有, 如果是c++, 这个问题如何解决?
C++ 的话
不可能解决
发表于 : 2008-07-22 10:11
由 BigSnake.NET
第二个问题..
foo() { for i in "$@" ; do echo $i ;done ; }
发表于 : 2008-07-22 10:13
由 79hy
c里面肯定用指针,c++的就不知道了。
发表于 : 2008-07-22 10:15
由 79hy
BigSnake.NET 写了:第二个问题..
foo() { for i in "$@" ; do echo $i ;done ; }
打印参数列表???有什么问题
发表于 : 2008-07-22 10:16
由 gcheng.chatswood
代码: 全选
#!/bin/bash
# a.sh - 打印环境变量的值,待打印变量名由命令行参数传入,数量不定
for i in $@; do
value=$(eval "echo \$$i")
echo "$i=$value"
done
运行:
代码: 全选
$ ./a.sh HOME PWD HOSTNAME SHELL
HOME=/home/yourlogin
PWD=/home/yourlogin
HOSTNAME=yourcomputer
SHELL=/bin/bash
发表于 : 2008-07-22 10:16
由 BigSnake.NET
79hy 写了:BigSnake.NET 写了:第二个问题..
foo() { for i in "$@" ; do echo $i ;done ; }
打印参数列表???有什么问题
顶楼, 第二个问题
发表于 : 2008-07-22 10:25
由 79hy
没明白你第2个问题问什么?
发表于 : 2008-07-22 10:26
由 BigSnake.NET
79hy 写了:没明白你第2个问题问什么?
就是变长参数
PS: 不是我问的
发表于 : 2008-07-22 10:27
由 79hy
代码: 全选
huying@huying:~$ echo $HOME
/home/huying
你可以在shell里直接打印这种环境变量阿
发表于 : 2008-07-22 10:29
由 yaoms
发表于 : 2008-07-22 10:58
由 yawsh
对于第二个问题,在c99语言里面可以使用自变量数量可变的函数,
称为“variadic" 函数,最典型的例子就是printf和scanf函数。
摘要:
“variadic”函数要存取可选性自变量的时,必须通过一个类型为
va_list的对象,该类型定义在“stdarg.h”中。相关的宏定义有:
void va_start(va_list argptr ,lastparam);
type va_arg(va_list argptr , type);
void va_end(va_list argptr);
例子:
//add() 累加可选性自变量
//自变量:n 为可选性自变量的数量
//返回值:累加和 double
#include <stdarg.h>
//...
double add(int n, ...)
{
int i = 0;
double sum = 0.0;
va_list argptr;
va_start(argptr , n); //取得第一个可选性自变量的位置来初始化argptr自变量指针
for(i = 0 ; i < n ; ++i ){
sum += va_arg(argptr , double ); //读取类型为double的自变量,累加到sum
}
va_end( argptr );
return sum;
}
发表于 : 2008-07-22 21:02
由 Tobey
谢谢各位,
1.
a=abc;abc=kkkkkk;eval b=\$$a;echo $b
我在windows cygwin中可以啊。我记得好像在os x中这样试过的。不行,可能自己写错了。明天上班再试试。
2.
$@ 。。谢谢
我用的这个
while [ $# -ne 0 ]; do
echo $1
shift
done
还是从教程上看来的。呵呵。