쉘에서 변수를 채우거나 인용하는 데 문제가 있습니다.

쉘에서 변수를 채우거나 인용하는 데 문제가 있습니다.

다음과 같은 데이터가 포함된 입력 파일이 있습니다.

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_이(가) 참조되었지만 할당되지 않았습니다("이름"을 의미했나요?).

관련 정보