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

関連情報