![awk가 변수에서 "\"(백슬래시)를 제거하지 못하도록 방지](https://linux55.com/image/160945/awk%EA%B0%80%20%EB%B3%80%EC%88%98%EC%97%90%EC%84%9C%20%22%5C%22(%EB%B0%B1%EC%8A%AC%EB%9E%98%EC%8B%9C)%EB%A5%BC%20%EC%A0%9C%EA%B1%B0%ED%95%98%EC%A7%80%20%EB%AA%BB%ED%95%98%EB%8F%84%EB%A1%9D%20%EB%B0%A9%EC%A7%80.png)
다음과 같은 쉘 코드 줄이 있습니다.
ls -1 *.mp3| awk -v here="$(cygpath -w $PWD)" -v source="$source" '{print "File Name: "$0"\n"here"\n"source}'
불행히도 다음과 같이 출력됩니다.
File Name: Data 00053.mp3
C:UsersathenaWorkProject_10.MBT
Source: Converted from RAW
이 줄 C:UsersathenaWorkProject_10.MBT
은C:\Users\athena\Work\Project_10\00.MBT
나는 지금 길을 잃었고 여기서 배울 것이 많습니다.
답변1
awk
전달받은 값을 어떻게 처리해야 하는지에 대한 질문입니다 -v
. 전달된 문자열의 백슬래시를 해석합니다.
대신 환경 변수를 통해 전달하세요.
here="$(cygpath -w "$PWD")" awk ... '{ print ... ENVIRON["here"] ... }'
ENVIRON
awk
현재 환경에서 이름으로 입력되는 변수 값을 포함하는 연관 배열입니다 .
귀하의 코드와도 관련이 있습니다.