シェル内の変数の入力や引用に問題があります。

シェル内の変数の入力や引用に問題があります。

次のデータを含む入力ファイルがあります。

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_ が参照されましたが割り当てられていません(「名前」を意味しましたか?)。

関連情報