26

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

入力:

echo '1+1' | bc -l

出力:

2

試行回数:

(うまくいきませんでした)

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

1 に答える 1

51

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

コマンド置換には 2 つの形式があります

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

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

    $ a=`echo 1+1 | bc -l`
    $ echo $a
    2
    $
    
  2. 現代的で、見栄えが悪く、簡単に入れ子にできる cmd-substitution が付属しています$( cmd )

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

あなたの 'she-bang' 行は と言っている#!/bin/shので、実際の Unix プラットフォームで実行している場合/bin/shは、元の Bourne シェルである可能性が高く、上記のオプション 1 を使用する必要があります。

使用中にオプション 2 を試し#!/bin/shて動作する場合は、最新のシェルを使用しています。echo ${.sh.version}またはと入力/bin/sh -c --versionして、有用な情報が得られるかどうかを確認してください。バージョン番号を取得した場合は、新しいシェルに含まれる追加機能について知りたいと思うでしょう。

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

a=$(( 1+1 ))

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

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

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

于 2013-04-18T00:57:36.990 に答える