次のシナリオがあります。
IDを使用してデータベースからいくつかのパラメータを検索するPerlスクリプトがあります。look_up_args.pl 234
以下が印刷されたとしましょう。abc 123 "something with spaces"
script.sh
以下を実行する別のシェルスクリプトがあります
some_command --param1 $1 --param2 $2 --par3 "$3" ...
私がやりたいことは、パラメータを使ってスクリプトを呼び出すことです。
私は次の2つの方法を試しました。
./script.sh `./look_up_args.pl 234`
./script.sh $(./look_up_args.pl 234)
それでも実行するたびにscript.sh
インクルードだけでスクリプトが失敗するよう$3
です。"something"
どのようなシェル拡張なども行わずに、引用符付き文字列を渡す方法を探しています。 3番目のパラメータには他の特殊なbash文字を含めることができますが、常に引用します。
答え1
私はこれをお勧めしませんが、次のことを試してください。
eval "./script.sh $(./look_up_args.pl 234)"
これはうまくいきますが、出力で発生するすべてのものeval
を評価するので、コードの挿入に対して脆弱であることに注意してください。look_up_args.pl
より良いオプションは、@thrigがコメントで提案したものです。標準化されたデータ型を使用してツール間でデータを渡します。改行で区切られた文字列も、シェルスタイル処理パイプラインに適した形式です。