web-dev-qa-db-ja.com

シェルスクリプト変数に出力を割り当てる方法

この結果をシェル変数に割り当てる方法は?

入力:

echo '1+1' | bc -l

出力:

2

試行

(動作しませんでした)

#!bin/sh
a=echo '1+1' | bc -l
echo $a
22
GarouDan

コマンド置換と呼ばれるシェル機能を探しています。

Cmd置換には2つの形式があります

  1. オリジナル、石器時代に戻りますが、完全に移植性があり、すべてのUnixライクなシェル(ほとんどすべて)で利用可能です。

    値を生成するコマンドをバックティック文字で囲みます。

    _$ a=`echo 1+1 | bc -l`
    $ echo $a
    2
    $
    _
  2. $( cmd )で提供される、モダンで、格好が悪く、簡単にネストできるcmd置換、つまり.

    _$ a=$(echo 1+1 |  bc -l)
    $ echo $a
    2
    $
    _

「she-bang」行には_#!/bin/sh_と書かれているため、実際のUnixプラットフォームで実行している場合は、おそらく_/bin/sh_が元のBourne Shellであり、オプション1を使用する必要があります上記。

まだ_#!/bin/sh_を使用しているときにオプション2を試しても機能する場合は、最新のシェルがあります。 _echo ${.sh.version}_または_/bin/sh -c --version_と入力して、有用な情報が得られるかどうかを確認してください。バージョン番号を取得したら、新しいシェルに含まれている追加機能について学習する必要があります。

新しい機能について言えば、bash、zsh、ksh93 +を実際に使用している場合は、サンプルコードを次のように書き直すことができます。

_a=$(( 1+1 ))
_

または、より多くの数学演算を実行している場合、それはすべてスコープ内にとどまります。次のようなシェル機能の算術演算を使用できます。

_(( b=1+1 ))
echo $b
2
_

どちらの場合でも、余分なプロセスの作成を回避できますが、シェルで浮動小数点演算を行うことはできません(bcを使用すると可能です)。

41
shellter