awk 인쇄가 bash -c에서 작동하지 않습니다

awk 인쇄가 bash -c에서 작동하지 않습니다

나는 이것이 잘 작동한다는 것을 알았습니다( unattended-upgrades프로세스의 PID만 인쇄됩니다):

lslocks | awk '/unattended-upgrades/ { print $2 }'

그러나 이는 실제로 해당 print부분을 무시합니다(전체 줄이 인쇄됩니다).

bash -c "lslocks | awk '/unattended-upgrades/ { print $2 }'"

이것은 Ubuntu 18.04 및 Bash 버전 4.4.20입니다.

이것을 만들어내는 공간은 무엇인가 bash -c?

답변1

여기에는 특별한 것이 없습니다 bash -c. 실제로 바깥쪽 큰따옴표를 사용하면 $2대화형 셸을 확장할 수 있습니다.

$ set -x
$ bash -c "echo foo bar | awk '{ print $2 }'"
+ bash -c 'echo foo bar | awk '\''{ print  }'\'''
foo bar

(여기서 "문제"는 작은 따옴표가 큰 따옴표 안에서 특별하지 않다는 것입니다. 외부 큰 따옴표는 "문자 그대로의 값을 유지합니다".Bash 참조 매뉴얼 3.1.2.3 큰따옴표.)

비교하다:

$ bash -c "echo foo bar | awk '{ print \$2 }'"
+ bash -c 'echo foo bar | awk '\''{ print $2 }'\'''
bar

관련 정보