シェルスクリプトを使用し、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は正しい値が取得できています。
table="SELECT concat('p_id=', id), concat('p_first=', first), ...
は、
table_name="SELECT concat('p_id=', id), concat('p_first=', first), ...
ですか?
失礼いたしました。
ご指摘の通りで記載間違いでしたので修正いたしました。
Q1:
実行したコードとエラーメッセージの対応は間違っていませんか?
(エラーメッセージにあるp_rootがコードに無いが?)
Q2:
eval ${result_tmp}
を
echo ${result_tmp}
にしてみて、どう表示されますか?
SELECT の結果のヘッダ行をシェル側で eval しようとしてエラーになっている様なので、mysql コマンドに -N オプションを付けると回避できるかもしれません。
table_name=$(mysql -N -u"${user}" -p -D"${dbname}" -hlocalhost -e"${table_name}")
さらに -B オプションも付ければ | の除去も不要になるかもしれません。
-Nオプションで消えました!
皆様ありがとうございます!
回答1件
あなたの回答
tips
プレビュー