2009-09-30 94 views

回答

85

使用bash的间接功能:

#!/bin/bash 
n=3 
echo ${!n} 

运行该文件:

$ ./ind apple banana cantaloupe dates 

产地:

cantaloupe 

编辑:

你也可以做数组切片:

echo ${@:$n:1} 

而不是数组下标:

echo ${@[n]} # WON'T WORK 
+7

任何人都可以给出一些解释为什么$ {@ [n]}不起作用? – 2012-04-14 23:06:03

+1

@AlexanderOleynikov它会导致“错误的替代”错误;我假设因为'@'(和'*')是“特殊参数”,并且因为它们不是有效的数组名称? '$ {@}'* does *表示编号的参数,但“@”不是一个数组,并且支持不会被实现来解析它,而例如, “'$ {unsetvariable}'”会产生空的输出,因为它是一个有效的数组/变量名称,尚未设置(这些异常特别在bash的源代码中处理,我猜)。我试图在'男士bash'中找到一个更好的理由,但是扫描@使我没有耐心。 ,P – 2015-11-30 17:03:17

4
$1 $2 ... $n 

$0包含脚本的名称。

0

正如你在Bash by Example中看到的,你只需要使用自动变量$ 1,$ 2等等。

$#用于获取参数个数。

-1

阅读

Handling positional parameters

Parameter expansion

$ 0:第一个位置参数

$ 1 ... $ 9:1的参数列表中的元素,以9

+0

这个答案没有解决OP的原题。他特别询问了如何通过存储在变量中的索引来获取参数。 – 2016-11-29 01:36:31

8

如果N保存在一个变量,使用

eval echo \${$N} 

如果它是一个经常使用

echo ${12} 

因为

echo $12 

并不意味着一样的!

+0

'$ {12}'和'$ 12'之间有什么区别? – HelloGoodbye 2015-07-02 08:07:56

+3

嗨@HelloGoodbye,'$ 12'表示'$ 1'和字符'2'。 '$ {12}'表示第12个参数。 – 2015-07-02 10:01:40