2017-07-14 6 views
0

次の質問は、私の問題のバリエーションです:どのように文字列パラメータを含むbashスクリプトに与えられたすべてのコマンドライン引数をそのまま子プロセスに渡すのですか?

Bash: Reading quoted/escaped arguments correctly from a string

私は、次の種類のbashスクリプトを( 'something.sh' と言う)書きたい...

#!/bin/bash 

python $* 

...すべてのコマンドライン引数を、子プロセスに直接渡したときに渡します。上記の$ *をベースにしたコマンドは、

./something.sh --version 

...のように動作します。しかし、それはカット...で...

python -c import 

(私の例では)もたらされる...

./something.sh -c "import os; print(os.name)" 

...この場合、インスタンスのような文字列を引数に無残に失敗しました最初のスペースの文字列引数(自然にPython構文エラーを生成します)。

私は、bashスクリプトによって呼び出される任意のプログラムの複数の引数と文字列引数を扱うことができる汎用ソリューションを探しています。

+0

が正常に動作しますか? –

+1

[shellcheck](http://shellcheck.net)を試してみてください。それは自動的にこの問題を指摘します。 –

答えて

2

使用この:

python "[email protected]" 

[email protected]$*は、両方のスクリプトが受信したすべての引数に展開されていますが、[email protected]を使用し、二重引用符でそれを置くとき、それは自動的にそのすべてを再引用それは正しく動作します。 bash manualから

一から出発し、位置パラメータに展開します。展開が二重引用符で囲まれると、各パラメータは別の単語に展開されます。つまり、"[email protected]""$1" "$2" …に相当します。私はそれをテストするとき

も参照してくださいWhy does [email protected] work different from most other variables in bash?

関連する問題