プラス記号付きの数字から文字列を生成するbashスクリプト

プラス記号付きの数字から文字列を生成するbashスクリプト

Bashスクリプトでは、私は数字で与えられた引数から式を生成し、+その前にプラス記号を追加するという一見単純な問題を偶然見つけました。

YEA= expr $2 \* 365
echo ${YEA}
pl="+"
echo "${pl}${YEA}"

これを文字列で連結したいと思います。たとえば、次のように$2=10出力する必要があります。

3650
+3650

コマンドラインではうまく機能しますが、スクリプトでは出力のみが行われます。

3650
+

私もprintfandを使ってみましたが、awk同様に動作しました。だから私の問題はbashにあると思います。

なぜこれが起こるのか説明できますか?

ベストアンサー1

代入演算子の後にスペースを入れないでください。

YEA= expr $2 \* 365
#   ~

exprスペースを使用すると、環境変数が$YEA明示的に空の文字列に設定されている場合に機能します。expr環境変数には興味がなく、結果の計算と出力にのみ興味があります。シェルコンテキストの変数は変更されません。

コマンドの出力を変数に代入するには、コマンド置換を使用します。

YEA=$(expr $2 \* 365)

または代わりに算術評価を使用してくださいexpr

(( YEA = $2 * 365 ))

おすすめ記事