shell 脚本中无法识别 awk

shell 脚本中无法识别 awk

我正在尝试在 shell 脚本中进行浮点运算。我了解到awk可以在命令行上完成此操作,但它的工作方式似乎并没有延续到 shell 脚本中。当我awk在下面输入时,它会变成灰色,好像是说 bash 无法识别它。当我运行它时$ ./script a 30 40,我得到 0。我做错了什么?

#!/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

相关内容