4

私はスクリプトを作成しようとしている次のものを持っています。私は混合引用符とアスタリスクに対応しようとして壁にぶつかりました。

これは私が持っているものです

cmd_1="/usr/local/nz/bin/nzsql -d ${SOURCE_DB} -c "
cmd_2="\"create external table '${EXTERNAL_PATH}${EXTERNAL_FILE}'"
cmd_3=" USING (QUOTEDVALUE 'DOUBLE' ESCAPECHAR '\' DELIM ',' TIMESTYLE '24HOUR' LOGDIR '${EXTERNAL_PATH}' ENCODING 'INTERNAL')"
cmd_4=" as select * from ${SOURCE_TABLE}\""
cmd=${cmd_1}${cmd_2}${cmd_3}${cmd_4}

これは、echo'd を実行すると正常に表示され、実際にはコマンド ラインにコピー アンド ペーストするだけで実行されます。

/usr/local/nz/bin/nzsql -d mydatDba -c "create external table '/datawarehouse/development/externaldata/output/EXT_mytable.csv' USING (QUOTEDVALUE 'DOUBLE' ESCAPECHAR '\' DELIM ',' TIMESTYLE '24HOUR' LOGDIR '/datawarehouse/development/externaldata/output/' ENCODING 'INTERNAL') as select * from mytable"

正しくエコーするために、 ${cmd} を二重引用符で囲む必要があったため、次のような実行についても同じことを行いました。

"${cmd}"

ただし、シェルスクリプトから実行すると、次のように表示されます:そのようなファイルまたはディレクトリはありません。関連するディレクトリを確認しましたが、前述のように、生成されたものを実際にコピーしてコマンドラインに貼り付けることができ、正常に動作します。

私のエコーコマンドとエラーの両方でエコーされているものは、実際に実行されているものではないとしか思えません。

「実際の」コマンドをエコーする方法や、引用符の使用についてアドバイスをいただければ幸いです。

ありがとう。

4

1 に答える 1

6

組み込みevalコマンドを使用します。

eval "$cmd"
于 2013-04-15T23:50:46.247 に答える