2011-12-06 4 views
3

2つのシェルスクリプトがあります。 1つのスクリプトは、受け取ったパラメータに基づいて2番目のスクリプトへの呼び出しを動的に作成し、呼び出しを実行します。変数を使用して別のスクリプト内からシェルスクリプトを呼び出すときにパラメータを引用する方法

私の問題は、最初のスクリプトが取得するパラメータにはスペースが含まれる可能性があるため、script2の呼び出しでパラメータを引用する必要があることです。

script1.sh:

#!/bin/sh 
param=$1 
command="./script2.sh \"$param\"" 
echo $command 
$command 

script2.sh:

#!/bin/sh 
param=$1 
echo "the value of param is $param" 

私が実行します。

./script1.sh "value with spaces" 

I

この

は、問題の例です。取得:

./script2.sh "value with spaces" 
the value of param is "value 

もちろん、私の必要はありません。

何が間違っていますか?

TIA。

EDIT:

私は解決策にtripleeeさんのコメントに有用linkに感謝を発見しました。ここでそれが誰のためにも役立ちます。要するに、これを解決するために、引数に配列を使用する必要があります。

script1.sh:

#!/bin/sh 
param=$1 

args=("$param") 
script_name="./script2.sh" 
echo $script_name "${args[@]}" 
$script_name "${args[@]}" 

答えて

1

そのまま引用して、すべてのコマンドラインパラメータを参照するために"[email protected]"を使用してください。

+0

どこで使うべきですか?私はparam = "$ @"を試みましたが、問題を解決しませんでした – Dikla

+1

名前付き変数に代入するのは問題ありません。 'sh -x ./script2" $ @ "'コマンドをエコーし​​たい場合、これは関連する理由で問題になります。 http://mywiki.wooledge.org/BashFAQ/050も参照してください。 – tripleee

関連する問題