シェルスクリプトで浮動小数点演算を実行しようとしています。私はawk
これがコマンドラインで実行できることを理解していますが、それがどのように機能するかはシェルスクリプトに渡されないようです。以下を入力すると、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