2017-05-29 6 views
1

にして引用符でBASH引数をRepassing?身体のスクリプトの議論を引用することは私を助けない。 test.shの例本体スクリプト:3つの引数の代わりに、4つのファンクションパスを作るためにどのように機能

func1(){ 
    echo "Func1: Amount arguments: $#, Passed arguments: [email protected]"; 
    for i in [email protected]; do 
     echo "ARG=$i"; 
    done; 
} 

echo "Body: Amount arguments: $#, Passed arguments: [email protected]"; 
func1 [email protected]; 

# quoting with single or double quote 
res=""; 
for i in "${@}"; do 
    # try to figure out if quoting was required for the $i: 
    grep -q "[[:space:]]" <<< "$i" && res="${res} \"${i}\"" || res="${res} ${i}"; 
done; 

echo "Quoted arguments: $res"; 
func1 $res; 

私は次の引数を指定してスクリプトを実行します。

bash ./test.sh 1 2 "3 4" 

結果:

Body: Amount arguments: 3, Passed arguments: 1 2 3 4 
Func1: Amount arguments: 4, Passed arguments: 1 2 3 4 
ARG=1 
ARG=2 
ARG=3 
ARG=4 
Quoted arguments: 1 2 "3 4" 
Func1: Amount arguments: 4, Passed arguments: 1 2 "3 4" 
ARG=1 
ARG=2 
ARG="3 
ARG=4" 

を私は "3 4" と第三引数を取得したいです。どうやってするの?ありがとうございました。

答えて

0

あなたは上の引数を引用する必要があります変数の展開があなたの引数に引用符を削除しないように機能func1へと、この関数の内部ループ上のコール。

#!/bin/bash 

func1(){ 
echo "Func1: Amount arguments: $#, Passed arguments: [email protected]" 
for i in "[email protected]"; do                                                      
    echo "ARG=$i" 
done 
} 

echo "Body: Amount arguments: $#, Passed arguments: [email protected]" 
func1 "[email protected]" 

彼らを必要としないので、私は;と各行の末尾を削除していることに注意してください。

+0

作品うーん...それは実際に動作する、引用符であれば - "$ @を"。これは私のための最良の解決策です。追加のコードは必要ありません。それは奇妙なことですが、早く私はそれをやろうとしましたが、成功しませんでしたが、今はすべてがうまく動作することを確認しました。ありがとうございました! – dva

+0

他のソリューションは、ネストされた関数のために、より一般的なものですが、これはあなたのコードのための十分なはずです。 'for'ループの引用符も注意してください(これは以前の試みでおそらく忘れてしまったものです)。それが有用であった場合 –

+0

(https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)[答えを受け入れる]ご検討ください。 –

0

あなたが引用必要な引数のリストを作成したい場合は、配列を使用する必要があります。構文上の引用符は入れ子になっていません。パラメーターを展開すると、内部引用符はリテラル文字として扱われます。

res=() 
for i in "${@}"; do 
    res+=("$i") 
done 

func "${res[@]}" 

(あなたは配列に追加除いiの値で何かをしていない場合は上記のコースの、res=("[email protected]")に、同等である。)

+0

おかげで、それは、 – dva

関連する問題