2013-05-05 6 views
-2

에서 변수 확장을 억제, 코드는 다음과 같이 간다.내가 파일 <code>a.txt</code>에서 일부 특정 라인을 얻으려면 awk 명령

는하지만, 어떤 이유로,이 같은 변수에 위의 명령을 추가해야한다

cmd="cat a.txt | awk '{if($0 > 100) print}'" 

하고 스크립트의 첫 번째 매개 변수로 확장거야 때문에, 문제가 $0 만들어 가지고 그것이 실제로 있어야하는 것과는 거리가 멀다.

어떻게 해결할 수 있습니까?

+1

대신'cat a.txt | awk ...'그냥 awk을해라. $ 0> 100 'a.txt' –

+2

왜 명령을 문자열로 쓰길 원합니까? 당신이 방금 시연했던 것처럼 그것은 삶을 매우 어렵게 만듭니다. –

+0

스크립트의 일부 부분에 버그가 표시되어 사용자에게 표시되지 않습니다. 대부분 일치하지 않는 작은 따옴표 문자이므로 awk 명령의 여는 따옴표가 이전의 일치하지 않는 따옴표의 닫는 따옴표로 처리됩니다. –

답변

0

작동하기까지 $ 앞에 백 슬래시를 추가하십시오.

+0

예, 작동합니다, 감사합니다. – Alcott

+3

백 슬래시를 "작동 할 때까지"추가하는 대신 백 슬래시가 필요한 이유를 생각하는 것이 좋습니다. 문자열에 여러 특수 문자가 포함되어 있으면 추가 된 이스케이프 문자의 순열을 다 써 버리는 것이 지루하고 깨지기 쉽습니다! –

+1

아니요! 이것은 절대적으로 잘못된 행동입니다. 스크립트의 다른 곳에서이 행에서 보이는 동작을 일으키는 버그가 있으며 다양한 위치에있는 임의의 문자를 붙여서 오류 메시지가 사라지도록 시도하는 것은 절대적으로 다시 돌아와 길을 무너 뜨릴 것입니다. –