ショートカットAlt- c(bash)

ショートカットAlt- c(bash)

時には数学演算を実行する必要がある場合もあります。bcまたはを使用できることを知っていますecho $(( 6/2 ))bc入力を読み取る関数を直接作成しました。しかし、時には入力に時間がかかります_bc "6/2"。だから私はこのような質問を持っています:

コマンドラインで数値に対して数学を実行する方法をzsh / bashに教える方法はありますか? 1つの例は1000の言葉と同じくらい価値があります。

$ 6/2
$ 3.0

つまり、zsh / bashは数字を認識して呼び出す必要があることを意味します。紀元前

ベストアンサー1

ショートカットAlt- c(bash)

bashでは、readlineユーティリティを使用して単語を先頭calcに置き、これまでに作成されたテキストを二重引用符で囲むキーシーケンスを定義できます。

 bind '"\ec": "\C-acalc \"\e[F\""'

23 + 46 * 89実行後にたとえば、次のようにするには、次のようにAlt入力cします。

 calc "23 + 46 * 89"

Enterキーを押すと、数学演算はcalcで定義された関数によって実行されます。これは簡単かもしれず、はるかに複雑かもしれません。

 calc () { <<<"$*" bc -l; }

(+) エイリアス

エイリアスを定義できます。

alias +='calc #'

これにより、これまで入力したコマンドライン全体がコメントアウトされます。次のように入力します。

 + (56 * 23 + 26) / 17

Enter キーを押すと、対応する行が翻訳され、calc #(56 * 23 + 26) / 17コマンドが呼び出されます。calccalcがこの関数の場合:

 calc(){ s=$(HISTTIMEFORMAT='' history 1);   # recover last command line.
         s=${s#*[ ]};                        # remove initial spaces.
         s=${s#*[0-9]};                      # remove history line number.
         s=${s#*[ ]+};                       # remove more spaces.
         eval 'bc -l <<<"'"$s"'"';           # calculate the line.
       }

 calc(){ s=$(history -1 |                          # last command(s)
             sed '$!d;s/^[ \t]*[0-9]*[ \t]*+ //'); # clean it up 
                                                   # (assume one line commads)
         eval 'bc -l <<<"'"$s"'"';                 # Do the math.
       }

+zshはエイリアスや文字を受け入れません#

値は次のように印刷されます。

 $ + (56 * 23 + 26) / 17
 77.29411764705882352941

文字列として引用されたaのみが必須であり+(ワイルドカードなし)、シェル変数を受け入れます。

 $ a=23
 $ + (56 * 23 + $a) / 17
 77.11764705882352941176

(+)機能

いくつかの制限があるので、以下は(bashで)関数を使用してあなたの要求に最も近いものです。

+() { bc -l <<< "$*"; }

次のように動作します。

$ + 25+68+8/24
93.33333333333333333333

問題は、シェルの解析を回避する方法がなく、a *(たとえば)をpwdのファイルリストに拡張できることです。

空白なしでコマンドラインを作成すると、おそらく大丈夫でしょう。

このような内容は$(...)拡張されますので、書かないようにご注意ください。

安全な解決策は、評価する文字列を引用することです。

$ + '45 + (58+3 * l(23))/7'
54.62949752111249272462

$ + '4 * a(1) * 2'
6.28318530717958647688

それだけ二つ文字はあなたより短いですが、私_bc "6/2"にとって+は、aはより直感的なようです。

おすすめ記事