GNU/Linux >> Linux の 問題 >  >> Linux

Bashで文字列を数値として評価する方法

Linuxではすべてがファイルであるように、bashではすべてが文字列です。

はい!技術的には、Bashにはデータ型はありません。基本的に、Bash変数は単なる文字列です。

そして、bashで算術演算を実行しようとすると、問題が発生します。追加しようとする数字は奇妙な結果をもたらします。

[email protected]:~$ sum=3+6
[email protected]:~$ echo $sum
3+6

文字列をbashで整数に変換するには、それらを$((X))でラップします。このように:

$((string))

文字列に識別可能な番号がある場合、それは番号として扱われます。上に示した例は、次のように修正できます。

[email protected]:~$ sum=$((3+6))
[email protected]:~$ echo $sum
9
$((...))内で行うことはすべて、算術演算と見なされます。

bashで算術計算を使用できるように、文字列から数値への変換をもう少し詳しく見てみましょう。

文字列変数を数値に変換する

基本的に文字列であるいくつかの「数字」を宣言しましょう。

[email protected]:~$ a=11
[email protected]:~$ b=3

割り当てられた番号を確認できます:

[email protected]:~$ echo $a
11
[email protected]:~$ echo $b
3

次に、両方の数値を加算して、値を3番目の変数cに格納してみましょう。 :

[email protected]:~$ c=$a+$b
[email protected]:~$ echo $c
11+3

上記の出力でわかるように、cも文字列として扱われています。

加算を成功させるには、算術展開によって加算を「変換」する必要があります。

[email protected]:~$ c=$(($a+$b))
[email protected]:~$ echo $c
14

cに注意してください 後で説明する別の操作で同じ算術展開を暗黙的に再度使用するまでは、実際には文字列です。

[email protected]:~$ c=$((5))

上記は次と同等です:

[email protected]:~$ c=5

3番目の変数dを使用してみましょう 別の操作の場合:

[email protected]:~$ d=10

これらの暗黙の宣言はすべて文字列のままです。 aを定義したのと同じです およびb 以前。

次に、2番目の操作について説明します:

[email protected]:~$ e=$(($a+$b*$c-$d))
[email protected]:~$ echo $e
16

上記の式では、bとcの積が最初に計算され、最後に加算と減算が続きます。

前に述べたように、$((...))の間で行うことはすべて、算術演算と見なされます。

この変換はすべて整数に対して機能します。浮動小数点、つまり小数点付きの数値では機能しません。 実際の文字列と数字を混ぜてみてください

文字列と整数を混合することは、コークスとミントを混合するよりも安全です。ただし、奇妙な結果が得られます。

[email protected]:~$ sum=$((3+hello))
[email protected]:~$ echo $sum
3

(文字列として)数字がある場合にのみ機能します。純粋な文字列の場合、魔法のようにいくつかの数字に変換されることはありません。代わりに、上記の例でわかるように、無視されます。

別の方法:exprを使用

exprを使用することもできます 評価を行うためのツールですが、coreutilsが必要なため、これは「ネイティブ」のBashプロシージャではないことに注意してください。 別のパッケージとして(デフォルトではUbuntuに)インストールされます。

[email protected]:~$ expr $a + $b \* $c - $d
16

この簡単なチュートリアルが、bash文字列を数値として評価するのに役立つことを願っています。ご質問やご提案がございましたら、下にコメントを残してください。


Linux
  1. Bashでループを作成する方法

  2. Bashは次のコードをどのように評価しますか?

  3. Bashシェルスクリプトで文字列を比較する方法

  1. Bashで文字列を連結する方法

  2. Bashでドット区切りバージョン形式の2つの文字列を比較するには?

  3. コマンドラインから smtp が機能しているかどうかを確認する方法 (Linux)

  1. Linuxシェルスクリプトで数値と文字列を比較する方法

  2. Bash - printf を使用して複数行の文字列 ('\n' を含む) を印刷する方法

  3. Linux のユーザー名を数字で始めてはいけないのはなぜですか?