나는 이것이 잘 작동한다는 것을 알았습니다( 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