
Bashスクリプトでは、私は数字で与えられた引数から式を生成し、+
その前にプラス記号を追加するという一見単純な問題を偶然見つけました。
YEA= expr $2 \* 365
echo ${YEA}
pl="+"
echo "${pl}${YEA}"
これを文字列で連結したいと思います。たとえば、次のように$2=10
出力する必要があります。
3650
+3650
コマンドラインではうまく機能しますが、スクリプトでは出力のみが行われます。
3650
+
私もprintf
andを使ってみましたが、awk
同様に動作しました。だから私の問題はbashにあると思います。
なぜこれが起こるのか説明できますか?
答え1
代入演算子の後にスペースを入れないでください。
YEA= expr $2 \* 365
# ~
expr
スペースを使用すると、環境変数が$YEA
明示的に空の文字列に設定されている場合に機能します。expr
環境変数には興味がなく、結果の計算と出力にのみ興味があります。シェルコンテキストの変数は変更されません。
コマンドの出力を変数に代入するには、コマンド置換を使用します。
YEA=$(expr $2 \* 365)
または代わりに算術評価を使用してくださいexpr
。
(( YEA = $2 * 365 ))