2009-09-30 84 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

相關問題