awk가 쉘 스크립트에서 인식되지 않습니다

awk가 쉘 스크립트에서 인식되지 않습니다

쉘 스크립트에서 부동 소수점 연산을 수행하려고 합니다. 나는 awk이것이 명령줄에서 수행될 수 있다는 것을 이해하지만 그것이 작동하는 방식은 쉘 스크립트로 전달되지 않는 것 같습니다. 아래를 입력 하면 awk마치 bash가 인식하지 못한다는 듯이 회색으로 변합니다. 실행하면 $ ./script a 30 400이 나오네요. 내가 뭘 잘못했나요?

#!/bin/bash
if [ $1 = a ]
then
     echo | awk '{print $2 + $3}'

답변1

#!/bin/bash
if [ $1 = a ]
then
     echo "$@" | awk '{print $2 + $3}'
fi

$2와 $3은 스크립트의 $1과 아무 관련이 없지만 awk에 있습니다.

답변2

전달된 매개변수를 항상 신뢰한다면 다음을 고려하십시오.

$ cat script
awk 'BEGIN{ print '"$*"' }'

$ ./script 30 + 40
70

$ ./script 30 \* 40
1200

$ ./script 30 / 40
0.75

*전역 문자이므로 이스케이프가 필요합니다 . 그렇지 않으면 매개변수가 인용됩니다. 예:

$ ./script '30 * 40'
1200

또한 이 접근 방식을 사용하면 간단한 산술 표현식에만 국한되지 않습니다.

$ ./script 'log(10)'
2.30259

$ ./script 'exp(10)'
22026.5

$ ./script '10^2 - sqrt(9)'
97

관련 정보