awk: 연결 문자열이 명령 문자열로 전달될 때 열이 인쇄되지 않습니다.

awk: 연결 문자열이 명령 문자열로 전달될 때 열이 인쇄되지 않습니다.

스크립트를 작성하면서 몇 가지 이상한 점을 발견했습니다.

다음 예제는 예상대로 작동합니다.

$ echo 123 | awk '{print $1 456}'
123456
$ sh -c "echo 123 | awk '{print $1}'"
123

그러나 다음 예에서는 그렇지 않습니다.

$ sh -c "echo 123 | awk '{print $1 456}'"
456

첫 번째 열에는 추가된 문자열이 인쇄될 것으로 예상됩니다. 이 문자열은 123456.txt 없이 동일한 명령을 실행할 때처럼 반환되어야 합니다 sh -c. 그러나 어떤 이유에서인지 첫 번째 열이 무시되고 있습니다. 흥미롭게도 $1문자열 연결을 수행하지 않아도 인쇄에는 문제가 없습니다.

이런 일이 발생하는 이유는 무엇이며, 별도의 셸 인스턴스에 전달된 명령에서 문자열 연결을 어떻게 수행합니까?

답변1

$플래그를 이스케이프 처리해야 합니다 .

$ sh -c "echo 123 | awk '{print \$1 456}'"
123456

그렇지 않으면 $1현재 쉘로 확장하십시오.

관련 정보