![Linux 'awk'에 변수 전달](https://rvso.com/image/747367/Linux%20'awk'%EC%97%90%20%EB%B3%80%EC%88%98%20%EC%A0%84%EB%8B%AC.png)
bash에서 이전에 정의한 변수를 awk에 어떻게 전달할 수 있나요? 예를 들어,
hostname="server1" cat /etc/passwd | awk -F":" '{print $1 " of $hostname"}
그리고 예상되는 출력은 다음과 같습니다.
root of server1
sys of server1
......
...... // for all user accounts
하지만 내가 얻는 것은
root of $hostname
sys of $hostname
답변1
인용 문제가 있습니다:
작은따옴표(''')로 문자를 묶으면 따옴표 안의 각 문자의 리터럴 값이 유지됩니다. 앞에 백슬래시가 있어도 작은따옴표 사이에 작은따옴표를 사용할 수 없습니다.
(에서배쉬 참조 매뉴얼).
당신이해야 할 일은 $hostname
작은 따옴표 바깥에 배치하는 것입니다.
cat /etc/passwd | awk -F":" '{print $1 " of '$hostname'"}'
또는 큰따옴표를 사용하고 다음을 사용하여 일부 문자를 이스케이프 처리합니다 \
.
cat /etc/passwd | awk -F":" "{print \$1 \" of $hostname\"}"
답변2
awk
에는 변수 옵션이 내장되어 있습니다 -v
.
cat /etc/passwd | awk -F":" -v hostname="server1" '{print $1 " of " hostname}