bashのパラメータ文字列を整数に変換する

bashのパラメータ文字列を整数に変換する

引数を整数に変換して算術演算を実行し、印刷する方法を見つけようとしています。たとえば、次のようになりますaddOne.sh

echo $1 + 1
>>sh addOne.sh 1
prints 1 + 1

答え1

Bashでは、「算術を実行するために引数を整数に変換」しません。 Bashでは、変数は状況に応じて整数または文字列として扱われます。

(整数コンテキストで変数を使用する場合、変数には有効な整数のように見える文字列を含める必要があります。そうしないとエラーが発生します。)

算術演算を実行するには、算術スプレッド演算子を呼び出す必要があります$((...))。たとえば、

$ a=2
$ echo "$a + 1"
2 + 1
$ echo "$(($a + 1))"
3

または通常好まれます:

$ echo "$((a + 1))"
3

bash(ksh93、zsh、またはyashとは反対)は、次の操作のみを実行することに注意してください。整数算数。浮動小数点数(小数点数)がある場合に役立つ可能性がある他のツールがあります。たとえば、次のようにしますbc

$ b=3.14
$ echo "$(($b + 1))"
bash: 3.14 + 1: syntax error: invalid arithmetic operator (error token is ".14 + 1")
$ echo "$b + 1" | bc -l
4.14

あるいは、bashの代わりに浮動小数点演算をサポートするシェルを使用することもできます。

zsh> echo $((3.14 + 1))
4.14

答え2

別の方法で使用できます。expr

前任者:

$ version="0002"
$ expr $version + 0
2
$ expr $version + 1
3

答え3

bash以下を使用して、任意の値を整数に変換できます。printf -v:

printf -v int '%d\n' "$1" 2>/dev/null

浮動小数点数は整数に変換され、数字のように見えない数字はゼロに変換されます。指数は前の数字に切り捨てられます。e

例:

$ printf -v int '%d\n' 123.123 2>/dev/null
$ printf '%d\n' "$int"
123
$ printf -v int '%d\n' abc 2>/dev/null
$ printf '%d\n' "$int"
0
$ printf -v int '%d\n' 1e10 2>/dev/null
$ printf '%d\n' "$int"
1

答え4

~によるとバッシュ文書、算術式を評価する構文はです$((expression))。たとえば、

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

変数に引数を割り当ててから、算術拡張を使用してスクリプトでそれを使用できます。

n=$1
echo $((n+1))

テストを受けてください:

$ bash ./test.sh 1
2
$ bash ./test.sh 7
8

関連情報