我有一个输入文件,其中的数据如下所示:
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_ 被引用但未分配(您的意思是“名称”吗?)。