2011-09-16 14 views
0

私は、引用符で囲まれた値を持つposix形式の引数を、呼び出された別のスクリプトに渡そうとしているbashスクリプトを持っています。コマンドラインでI型があります。これは、引数がキーfooを持つ意味引用符で囲まれたPosix引数の値をbashに渡す

somescript --foo="bar baz" 

、値がbar bazです。 somescriptの中で、あなたはこれが働くだろうと思うかもしれない:

innerscript "[email protected]" 

をしかし、この各引数の全体、キーと値の両方が、一緒にだけでなく、値をチャンク再引用します。したがって、innerscriptは"--foo=bar baz"を受け取り、という空の値を持つfoo=bar bazという名前の鍵を渡そうとしていると考えています。

bashに渡されたすべての引数を再引用するように指示するのは十分ではありません。私はbashに "のすべての引数を渡して再引用してください。正確に引用された方法を"に伝える必要があります。仲間の私の引用符の位置を変更しないでください!

答えて

3

問題はinnerscriptです。

innerscript --foo="bar baz" 
innerscript "--foo=bar baz" 
innerscript --foo=bar\ baz 
innerscript --foo=bar' 'baz 

または間違いなく他の多くの代替手段の間に違いはありません。 innerscriptの内部には、$1(シェル表記)の文字数は12文字(--foo=bar baz)です。ちなみに、somescriptについても同様です。表示されているように呼び出すと、二重引用符は表示されません。それらはシェルによって処理されます(そしてシェルによって削除されます)。これを確認するには

、試してみてください。引数とオプションgetoptコマンドを使用し解析するための

echo --foo="bar baz" 
+0

POSIX、GNUスタイルです。あなたは正しかった。私は思ったように完全にポジションに依存しないオプションを持っていませんでした。 –

1

これはできません。

スクリプトは引数を受け取ります。シェルがその行をと解析すると、最初の引数は "--foo = bar baz"となります。あなたはそれを防ぐために何もすることはできません。しかし、私はそれが何らかの問題を引き起こす理由を見ていない、あなたは=に基づいて引数を分割することができます。

# function test { echo $1; } 
# test a"b""c"'d'\e 
abcde 
0

を。

注1:getopt(gnuコマンド)は、getopts(POSIXで定義)です。

注2:--long-optionsはない問題がinnerscriptの私の理解していました

+0

[bashスクリプトでgetoptsを使用して、長いコマンド行オプションと短いコマンド行オプションを取得する](http://stackoverflow.com/questions/402377/using-getopts-in-bash-shell-script-to-get-long-and-短いコマンドラインオプション/ 402413#402413)。 –

関連する問題