私は私のDBからデータを取得するには、次のBASHのmysqlの文を使用しています。
mysql -N -u root --password=ROOT DB -h 127.0.0.1 -e "SELECT * FROM site where id like '1234'" | while read A B C D E F G H I J K L M N O P Q R S T U V W X Y Z; do
echo $A
echo $B
done
ZにAのすべての値を取得するには、これは長い息切れ道です。
どのように私はこのもっと良いとに基づいて変数を作成することができますread
値の名前と結果を。?
例えば: create var A which contains value of $A and do this all the way upto var Z containing the value of $Z
これは一例であり、値はAZと呼ばれるが、適切な名前を持つことはありません。真の適切な名前に基づいて変数を作成し、それに値を関連付ける方法はありますか?
例えば:
mysql -N -u root --password=ROOT DB -h 127.0.0.1 -e "SELECT * FROM site where id like '1234'" | while read site_id site_location site_size etc.......
; 行う
感謝
mysql
呼び出しは、パイプ-にするためにwhileループこのように必要があります。
while read -r site_id site_location site_size _ ; do
echo "$site_id" "$site_location" "$site_size"
done < <(
mysql -N -u root --password=ROOT DB -h 127.0.0.1 -e "SELECT * FROM site where id like '1234'"
)
< <(command)
リダイレクションが可能command
サブシェルで実行するが、メインスレッドのフィードread
。だから、ときread -r var1 var2 ... varn < <(command)
、変数はメインスレッドで有効です。
一方command | read -r var
有するcommand
メインスレッドで実行するとread
、サブシェルで実行し、VARは、サブシェル内でのみ有効です。
テーブルから各カラム名に一致する変数名を取得します
このスクリプトは、テーブルの説明を読み取り、作成vars
列名を含む配列を。
これは、読み込み作成し、間接を使用して、これらの名前の各シェル変数を出力します。
#!/usr/bin/env bash
# Pupulate the vars array with the column names from the table
IFS=$'\n' read -r -d '' -a vars < <(
mysql -N -u root --password=ROOT DB -h 127.0.0.1 -e 'SHOW COLUMNS FROM site' |
cut -d ' ' -f1
)
# Output column headers
printf '%s\t' "${vars[@]}"
# read and create variables names matching column names
while read -r "${vars[@]}"; do
for varname in "${vars[@]}"; do
# Use ! indirection to print the value for the variable
printf '%s\t' "${!varname}"
done
done < <(
mysql -N -u root --password=ROOT DB -h 127.0.0.1 -e "SELECT * FROM site where id like '1234'"
)