質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Q&A

解決済

1回答

1283閲覧

シェルスクリプトでテーブルから取得した値を変数に代入する

退会済みユーザー

退会済みユーザー

総合スコア0

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

0グッド

0クリップ

投稿2022/03/09 04:33

編集2022/03/09 04:52

シェルスクリプトを使用し、SELECTで取得したテーブルデータを変数に代入して使用できるようにしようとしています。

https://teratail.com/questions/210810
こちらを参考にし、取得、変数への代入はできているのですがエラー文も表示されます。

これはどうしたら消えるのでしょうか?

table_name="SELECT concat('p_id=', id), concat('p_first=', first), concat('p_second=', second) FROM table_name ORDER BY time DESC LIMIT 1;" echo "${table_name}" table_name=$(mysql -u"${user}" -p -D"${dbname}" -hlocalhost -e"${table_name}") echo "これの中身" ${table_name} for result_tmp in ${table_name//|/ } do if [ "${result_tmp}" != "+--------------------+---------+" ]; then eval ${result_tmp} fi done echo ${id} echo ${p_first} echo ${p_second}

エラー内容
eval: line (行数): syntax error near unexpected token 'p_root=',' eval: line (行数): concat('p_root=','

「これの中身」で表示されるのは
concat('p_id=', id) concat('p_first=', first) concat('p_second=', second) p_id=0000000001 first=0900 second=1800
です。
p_id、first、secondは正しい値が取得できています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2022/03/09 04:50

table="SELECT concat('p_id=', id), concat('p_first=', first), ... は、 table_name="SELECT concat('p_id=', id), concat('p_first=', first), ... ですか?
退会済みユーザー

退会済みユーザー

2022/03/09 04:52

失礼いたしました。 ご指摘の通りで記載間違いでしたので修正いたしました。
otn

2022/03/09 05:44 編集

Q1: 実行したコードとエラーメッセージの対応は間違っていませんか? (エラーメッセージにあるp_rootがコードに無いが?) Q2: eval ${result_tmp} を echo ${result_tmp} にしてみて、どう表示されますか?
melian

2022/03/09 05:34

SELECT の結果のヘッダ行をシェル側で eval しようとしてエラーになっている様なので、mysql コマンドに -N オプションを付けると回避できるかもしれません。 table_name=$(mysql -N -u"${user}" -p -D"${dbname}" -hlocalhost -e"${table_name}") さらに -B オプションも付ければ | の除去も不要になるかもしれません。
退会済みユーザー

退会済みユーザー

2022/03/09 05:36

-Nオプションで消えました! 皆様ありがとうございます!
guest

回答1

0

ベストアンサー

-Nオプションをつけて解決できました。
質問時の内容から少しいじって最終的に以下内容で想定通りの動きでエラー表示されなくなりました。

table_name="SELECT concat('p_id=', id), concat('p_first=', first), concat('p_second=', second) FROM table_name ORDER BY time DESC LIMIT 1;" echo "${table_name}" table_name=$(mysql -N -u"${user}" -p -D"${dbname}" -hlocalhost -e"${table_name}") echo "これの中身" ${table_name} for result_tmp in ${table_name} do eval ${result_tmp} done echo ${id} echo ${p_first} echo ${p_second}

投稿2022/03/09 05:42

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問