awk 명령의 주석 안의 작은 따옴표로 인해 따옴표가 일치하지 않는 이유는 무엇입니까? [복사]

awk 명령의 주석 안의 작은 따옴표로 인해 따옴표가 일치하지 않는 이유는 무엇입니까? [복사]

파일의 열 1에 있는 값을 합산하는 다음 awk 문을 고려하세요.

cat $1 e | awk '      {total=total+$1}   # this comment does not contain any single quote marks
                   END {printf("%.2f\n",total)}
               '

예상대로 작동합니다.

이제 동일한 명령문을 유지하면서 주석을 변경하여 내부에 작은따옴표를 추가해 보겠습니다.

cat $1 e | awk '      {total=total+$1}   # don't do this 
                   END {printf("%.2f\n",total)}
               '

Mac Os 또는 Centos에서 이 프로그램을 실행하면 다음 오류가 발생합니다.

./bad_sum: line 2: syntax error near unexpected token `
./bad_sum: line 2: `                  END {printf("%.2f\n",total)}'

awk가 don't의 따옴표를 awk 뒤의 따옴표와 일치시키려고 시도하는 것 같아서 혼란스러워집니다. 그런데 댓글은 무시해야 하는데, 이걸 어떻게 설명해야 할까요?

답변1

이것은 awk와 관련이 없습니다. 대부분의 쉘(Bourne 또는 csh와 유사하다고 간주되는 쉘)에서는 작은따옴표로 구분된 스크립트 또는 문자열 내에 작은따옴표를 포함할 수 없습니다. 시도해 echo 'foo'bar'보고 실패하는지 확인하십시오. 이제 시도해 echo 'foo\'bar'보고 실패하는지 확인하십시오. 이제 그들의 성공 이유를 알아낼 수 있는지 echo "foo'bar"확인해 보세요 . (아니요, 저는 그렇습니다.echo 'foo'\''bar'아니요스크립트를 큰따옴표로 묶는 것이 좋습니다. 바라보다https://mywiki.wooledge.org/Quotes더 많은 정보를 알고 싶습니다.

답변2

이는 쉘이 awk가 아닌 쉘에서 따옴표와 나머지 awk 문의 내용을 해석하기 때문입니다.

관련 정보