스크립트를 작성하면서 몇 가지 이상한 점을 발견했습니다.
다음 예제는 예상대로 작동합니다.
$ echo 123 | awk '{print $1 456}'
123456
$ sh -c "echo 123 | awk '{print $1}'"
123
그러나 다음 예에서는 그렇지 않습니다.
$ sh -c "echo 123 | awk '{print $1 456}'"
456
첫 번째 열에는 추가된 문자열이 인쇄될 것으로 예상됩니다. 이 문자열은 123456
.txt 없이 동일한 명령을 실행할 때처럼 반환되어야 합니다 sh -c
. 그러나 어떤 이유에서인지 첫 번째 열이 무시되고 있습니다. 흥미롭게도 $1
문자열 연결을 수행하지 않아도 인쇄에는 문제가 없습니다.
이런 일이 발생하는 이유는 무엇이며, 별도의 셸 인스턴스에 전달된 명령에서 문자열 연결을 어떻게 수행합니까?
답변1
$
플래그를 이스케이프 처리해야 합니다 .
$ sh -c "echo 123 | awk '{print \$1 456}'"
123456
그렇지 않으면 $1
현재 쉘로 확장하십시오.