如何处理变量名是变量的情况?

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
zhouwei400
帖子: 20
注册时间: 2010-08-25 15:21

如何处理变量名是变量的情况?

#1

帖子 zhouwei400 » 2012-04-24 16:51

比如是说一个函数有许多参数 我要通过一个变量来访问其中一个参数
例如 当变量i 等于 2时我就把 $3 赋值给 另一个变量temp 我google了一下,似乎是用eval 但是总是出错

代码: 全选

temp=eval $`expr $i + 1`
输出为
line 19: $2: command not found
用的是bash 大家能告诉我怎么办吗?
jtshs256
帖子: 22323
注册时间: 2010-07-19 21:41
系统: OS X

Re: 如何处理变量名是变量的情况?

#2

帖子 jtshs256 » 2012-04-24 17:06

纯数字能做变量名么……
躺平
头像
zhouwei400
帖子: 20
注册时间: 2010-08-25 15:21

Re: 如何处理变量名是变量的情况?

#3

帖子 zhouwei400 » 2012-04-24 17:10

jtshs256 写了:纯数字能做变量名么……
不是自己声明的,函数的参数就是通过$1 $2 来访问的
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 如何处理变量名是变量的情况?

#4

帖子 lilydjwg » 2012-04-24 17:50

代码: 全选

eval "temp=$`expr $i + 1`"
这样行不?
PS: 纯数字可以作变量的。
头像
zhouwei400
帖子: 20
注册时间: 2010-08-25 15:21

Re: 如何处理变量名是变量的情况?

#5

帖子 zhouwei400 » 2012-04-24 18:09

lilydjwg 写了:

代码: 全选

eval "temp=$`expr $i + 1`"
这样行不?
PS: 纯数字可以作变量的。
行了 ,非常感谢 :em11
头像
zhouwei400
帖子: 20
注册时间: 2010-08-25 15:21

Re: 如何处理变量名是变量的情况?

#6

帖子 zhouwei400 » 2012-04-25 23:32

又有新问题了,要是参数数目大于10怎么办呢?
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 如何处理变量名是变量的情况?

#7

帖子 lilydjwg » 2012-04-25 23:37

zhouwei400 写了:又有新问题了,要是参数数目大于10怎么办呢?

代码: 全选

${11}
头像
zhouwei400
帖子: 20
注册时间: 2010-08-25 15:21

Re: 如何处理变量名是变量的情况?

#8

帖子 zhouwei400 » 2012-04-25 23:43

lilydjwg 写了:
zhouwei400 写了:又有新问题了,要是参数数目大于10怎么办呢?

代码: 全选

${11}
可是这样写还是会报错啊:

代码: 全选

eval ”temp=${`expr $i + 1`}“
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 如何处理变量名是变量的情况?

#9

帖子 lilydjwg » 2012-04-26 0:25

代码: 全选

eval "temp=\${`expr $i + 1`}"
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 如何处理变量名是变量的情况?

#10

帖子 aerofox » 2012-04-26 5:51

其实很多情况下都不需要这种处理方法。
考虑用 shift 吧。
头像
zhouwei400
帖子: 20
注册时间: 2010-08-25 15:21

Re: 如何处理变量名是变量的情况?

#11

帖子 zhouwei400 » 2012-04-27 12:43

lilydjwg 写了:

代码: 全选

eval "temp=\${`expr $i + 1`}"
恩,这是可行的
aerofox 写了:其实很多情况下都不需要这种处理方法。
考虑用 shift 吧。
最终用shift解决问题了
回复