[已解决][问题]如何将一个变量值作为另一个变量的名称?

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
Tobey
帖子: 178
注册时间: 2006-03-30 13:34

[已解决][问题]如何将一个变量值作为另一个变量的名称?

#1

帖子 Tobey » 2008-07-21 21:00

1 。[问题]如何将一个变量值作为另一个变量的名称?

比如:
$1=a
$2=b
......

$a=ok
$b=okay

假设我们不知道需要$a和$b哪个变量的值.只知道需要名称为$1的值的变量的值。

如何由$1 我们想要的值?
---------------------------------

2.

或者如何获得传递给1个函数的所有参数的值,前提是参数个数不定,编程者不知道会有几个,但需要在函数中处理所有参数。。


2个问题,任一解决即可。
上次由 Tobey 在 2008-07-22 21:03,总共编辑 1 次。
头像
yjcong
帖子: 2470
注册时间: 2006-02-28 3:11

#2

帖子 yjcong » 2008-07-22 1:36

同问, 还有, 如果是c++, 这个问题如何解决?
一梦三年,
松风依旧,
萝月何曾老.


灵幽听微, 谁观玉颜?
灼灼春华, 绿叶含丹.
头像
79hy
帖子: 80
注册时间: 2007-10-24 10:21
来自: 长沙

#3

帖子 79hy » 2008-07-22 10:08

这个问题比较常用,呵呵

shell :

a=abc;abc=kkkkkk;eval b=\$$a;echo $b
上次由 79hy 在 2008-07-22 10:10,总共编辑 1 次。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#4

帖子 BigSnake.NET » 2008-07-22 10:09

yjcong 写了:同问, 还有, 如果是c++, 这个问题如何解决?
C++ 的话
不可能解决
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#5

帖子 BigSnake.NET » 2008-07-22 10:11

第二个问题..
foo() { for i in "$@" ; do echo $i ;done ; }
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
79hy
帖子: 80
注册时间: 2007-10-24 10:21
来自: 长沙

#6

帖子 79hy » 2008-07-22 10:13

c里面肯定用指针,c++的就不知道了。
头像
79hy
帖子: 80
注册时间: 2007-10-24 10:21
来自: 长沙

#7

帖子 79hy » 2008-07-22 10:15

BigSnake.NET 写了:第二个问题..
foo() { for i in "$@" ; do echo $i ;done ; }
打印参数列表???有什么问题
gcheng.chatswood
帖子: 14
注册时间: 2008-07-22 9:56

#8

帖子 gcheng.chatswood » 2008-07-22 10:16

代码: 全选


#!/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
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#9

帖子 BigSnake.NET » 2008-07-22 10:16

79hy 写了:
BigSnake.NET 写了:第二个问题..
foo() { for i in "$@" ; do echo $i ;done ; }
打印参数列表???有什么问题
顶楼, 第二个问题
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
79hy
帖子: 80
注册时间: 2007-10-24 10:21
来自: 长沙

#10

帖子 79hy » 2008-07-22 10:25

没明白你第2个问题问什么?
#######################
最终幻想: 用vbox虚拟出一套房子
#######################
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#11

帖子 BigSnake.NET » 2008-07-22 10:26

79hy 写了:没明白你第2个问题问什么?
就是变长参数

PS: 不是我问的
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
79hy
帖子: 80
注册时间: 2007-10-24 10:21
来自: 长沙

#12

帖子 79hy » 2008-07-22 10:27

代码: 全选

huying@huying:~$ echo $HOME
/home/huying
你可以在shell里直接打印这种环境变量阿
头像
yaoms
帖子: 4952
注册时间: 2007-10-19 14:51
来自: 深圳

#13

帖子 yaoms » 2008-07-22 10:29

:D
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'
头像
yawsh
帖子: 105
注册时间: 2006-04-29 10:51

#14

帖子 yawsh » 2008-07-22 10:58

对于第二个问题,在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;
}
头像
Tobey
帖子: 178
注册时间: 2006-03-30 13:34

#15

帖子 Tobey » 2008-07-22 21:02

谢谢各位,

1.
a=abc;abc=kkkkkk;eval b=\$$a;echo $b

我在windows cygwin中可以啊。我记得好像在os x中这样试过的。不行,可能自己写错了。明天上班再试试。


2.
$@ 。。谢谢

我用的这个
while [ $# -ne 0 ]; do
echo $1
shift
done

还是从教程上看来的。呵呵。
回复