bash 변수에 명령을 사용하려고 하는데 오류가 발생합니다. 명령 때문에 발생한 것 같은데 {}
어떻게 해결해야 할지 모르겠습니다.
명령은 다음과 같습니다:
add_Area="awk -F\t '{$1="area" FS $1;}1' OFS='\t'"
Output="$( echo $some_csv_-var | ${add_Area})"
오류는 다음과 같습니다
awk: 1: unexpected character '''
fileawk: line 2: missing } near end of file
답변1
일반적으로 말해서 명령을 변수에 포함시킨 다음 해당 변수를 실행하는 것은 좋은 생각이 아닙니다. 그러나 이를 달성하기 위해 함수를 사용할 수 있습니다.
먼저 무슨 일이 일어나고 있으며 왜 오류가 발생하는지 설명하겠습니다. 평가의 순서에 관한 것입니다.
add_Area="awk -F\t '{$1="area" FS $1;}1' OFS='\t'"
문자열 주위의 큰따옴표를 사용하면 쉘이 변수를 평가할 수 있습니다. 이 경우 $1
쉘이 이를 보고 처리하므로 설정되지 않았을 가능성이 높습니다. 또한 큰따옴표 안에 큰따옴표를 넣으려고 합니다. 이는 본질적으로 큰따옴표 부분이 중지되었다가 나중에 다시 시작됨을 의미합니다. 결과 분포는 다음과 같습니다.
add_Area="awk -F\t '{=area FS ;}1' OFS='\t'"
다음 줄에서 실행하려고 하면 구문이 올바르지 않기 때문에 실패합니다.
이제 귀하가 달성하고자 하는 것에 대한 해결책을 살펴보겠습니다.
# Declare a function
add_Area() {
awk -F$'\t' 'BEGIN { OFS = FS } { $1 = "area" FS $1 } 1'
}
# Use the function as if it were a normal command
Output="$( echo "$some_csv_var" | add_Area )"
# Later
echo "$Output"