![awk 인쇄가 bash -c에서 작동하지 않습니다](https://linux55.com/image/203752/awk%20%EC%9D%B8%EC%87%84%EA%B0%80%20bash%20-c%EC%97%90%EC%84%9C%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4.png)
나는 이것이 잘 작동한다는 것을 알았습니다( 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