在 shell 中填充/引用变量时遇到问题

在 shell 中填充/引用变量时遇到问题

我有一个输入文件,其中的数据如下所示:

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_,$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_ 被引用但未分配(您的意思是“名称”吗?)。

相关内容