次のデータを含む入力ファイルがあります。
name,local_unit,region_unit
AAAAA,hour,cell
BBBBB,15min,cell
これは私の皮です。
#!/bin/bash
file_path='/home/vikrant_singh_rana/test_bq_file.csv'
{
read
while IFS=, read -r name local_unit region_unit
do
echo $name
echo $local_unit
echo $region_unit
ingest_tablename=ABC_XYZ_$name
echo $ingest_tablename
aggr_tablename=ABC_XYZ_$name_$local_unit_$region_unit_aggregation
echo $aggr_tablename
done
} < $file_path
変数のテーブル名は入力できますが、ingest_tablename
変数のテーブル名は入力できません。aggr_tablename
出力は以下の通りです。
AAAAA
hour
cell
ABC_XYZ_AAAAA
ABC_XYZ_
BBBBB
15min
cell
ABC_XYZ_BBBB
ABC_XYZ_
答え1
アンダースコアは_
変数名の有効な文字なので、およびというABC_XYZ_$name_$local_unit_$region_unit_aggregation
名前の変数を拡張してみてください$name_
。最初の2つはおそらく間違っていたでしょう。これを防ぐには、問題のある変数名を中括弧に入れてください。$local_unit_
$region_unit_aggregation
aggr_tablename="ABC_XYZ_${name}_${local_unit}_$region_unit_aggregation"
(そうで aggr_tablename="ABC_XYZ_${name}_${local_unit}_${region_unit}_aggregation"
なければならないと思います。)
課題に引用符が必ず必要なわけではありませんが、そうでなければ良い考えです。
FWIW、shellcheck.netはこの問題について説明していますが、残念ながら回避策は説明していません。
^-- SC2154: name_ が参照されましたが割り当てられていません(「名前」を意味しましたか?)。