2013-06-20 43 views
1

我想獲取我的bash腳本的輸入參數。 testbash.sh 4 1 2 4 5科學a p * 我想獲取這些參數作爲一個數組,我用$ @來獲取它所有的數組。現在基於第一個參數,我需要對其餘的子集進行子集化。這裏第一個數字是4,所以從第二個參數到第五個參數應該保存爲一個數組,如[1 2 4 5],其餘數組保存在另一個數組中。bash命令行參數到數組和基於參數值的子集數組

我想這

array=([email protected]) len=${#array[@]} args=${array[@]:0:$len-${array[1]}} echo $args

我想這讓第一部分,但我得到的錯誤語法錯誤的表達(錯誤令牌「:-4」),當我跑這個「testbash.sh 4 1 2 4 5科學AP *「

+0

可能需要手動構建數組;無論如何,請張貼你已經嘗試過的代碼。 –

+0

添加了我試過的代碼 – Vignesh

回答

4

這裏有一種方法:

FIRST_SET=("${@:2:$1}") 
REST=("${@:$(($1+2))}") 

即直接從參數的工作原理,而不是使用一箇中間陣列。使用中間數組很容易,或多或少地以相同的方式使用,但記住數組索引從0開始,而參數索引有效地從1開始(因爲參數0是命令名)。

請注意,引號很重要:沒有它們,命令行參數將通過glob擴展和單詞分割傳遞額外的時間;實際上,你失去了引用命令行參數的能力。

+0

這不起作用。 FIRST_SET只存儲1,SECOND_SET不存儲 – Vignesh

+0

@Vignesh:適合我。你如何測試? http://ideone.com/iDXPAX – rici

+0

保存在test.sh文件中,並添加了+ x和test.sh 4 1 2 4 5科學a p * – Vignesh