脱出() エコ

脱出() エコ

;どのように脱出したり、エコーすることができますか()""このコマンドをエコーし​​たい

"LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 partition (ds='$TGLS', periode='$WKTS');"

syntax error near unexpected tokenしかし、次のように一重引用符をエスケープしてコマンドを変更しましたが、「}」と表示されます。

'LOAD DATA INPATH '"'"$i"'"' INTO TABLE transient.url_log_201803 partition (ds='"'"$TGLS"'"', periode='"'"$WKTS"'"');'

そのコマンドを端末やファイルにエコーする方法がわかりません。私もこれを脱出しようとしましたが、\何も

ベストアンサー1

複雑なデータを使用しようとしないでくださいecho

ここでは、ここでドキュメントを使用します。

cat <<END_SQL
LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 PARTITION (ds='$TGLS', periode='$WKTS');
END_SQL

次のコマンドにパイプする必要がある場合mysql(これはHive SQLコマンドですが、Hiveクライアントが通常何と呼ばれるのかわからないため、例ではmysqlこれを使用します):

cat <<END_SQL | mysql
LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 PARTITION (ds='$TGLS', periode='$WKTS');
END_SQL

変数を拡張せずに渡す必要がある場合:

cat <<'END_SQL' | mysql
LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 PARTITION (ds='$TGLS', periode='$WKTS');
END_SQL

ここにあるドキュメントを使用すると、読みやすいコード(短い行)を書くこともできます。

cat <<'END_SQL' | mysql
LOAD DATA INPATH '$i'
INTO TABLE transient.url_log_201803
     PARTITION (ds='$TGLS', periode='$WKTS');
END_SQL

文書の内容と(より重要な)閉じるタグ(END_SQL上記)はインデントしないでください。

for ...some loop range...; do
    cat <<END_SQL | mysql
LOAD DATA INPATH '$i'
INTO TABLE transient.url_log_201803
     PARTITION (ds='$TGLS', periode='$WKTS');
END_SQL
done

閉じるタグがインデントされている場合、シェルはそれを見つけることができず、ここでファイルの最後で文書が終了するというエラーメッセージが表示されます。

おすすめ記事