2011-07-22 14 views
1

基本的には、スクリプトが呼び出された後にすべての引数を表すために、$ bashスクリプトで$ *を呼び出せますが、最初の2つは無視します。すべてのスクリプトは、単に引数をエコーバックしてなかった場合($ 1と$ 2)

だから簡単のため、それは次のような振る舞いをする必要があります

$ myscript.sh first_argument second_argument foo bar baz blah blah etc 
foo bar baz blah blah etc 

はこれを行う簡単な方法はありますか?ちなみに、第1引数と第2引数の後にテキストの量に制限はありません。その量がわかっていれば、$ 3 $ 4 $ 5 $ 6のように個別に呼び出すことができます...

明らかです。

おかげで、

ケビン

答えて

0

おそらくshiftがお手伝いします。

4

使用shift

#!/bin/sh 

shift 2 

echo [email protected] 

./myscript A B C D出力C D

引数が2つ未満の場合は失敗し、確認するには$#を使用します。

ここにはかなり包括的なdocumentation of shiftがあります。

+0

あなたの答えにいくつかのドキュメントへのリンクを追加してください。私はあなたの答えがより完全であるので削除します:) –

+0

@Ivan:すべて完了! –

+0

あなたは受け入れられた答えを削除することはできません...ねえ、OP、彼の答えは本当に良いです!それを選択してください:) –

0

これで、最初の2つを除くすべてのargsを配列に格納します。このargsは、ループすることができます。

#!/bin/bash 

declare -a args 

count=1 
index=1 
for arg in "[email protected]" 
do 
    if [ $count -gt 2 ] 
    then 
     args[$index]=$arg 
     let index=index+1 
    fi 
    let count=count+1 
done 

for arg in "${args[@]}" 
do 
    echo $arg 
done 
+0

シフトオプションはより簡潔に見えますが。 :) –

7

さまざまな引数を取り出すために、配列スライスの変形を使用できます。 3からの引数を印刷するには、これを使用する:shiftベースのオプションとは異なり

echo "${@:3}" 

が、これはめちゃくちゃに他の目的のために引数リストをしません。

関連する問題