コマンドパラメータ($1、$2)を整数に変更するには?

コマンドパラメータ($1、$2)を整数に変更するには?

$1 $2コマンドライン()からスクリプトの複数のパラメータを取得します。

入力された値がゴミではないことを確認するためにテストしました。

if [ $1 ]; then
    INPUT=$1
if [[ -n ${INPUT//[0-9]/} ]]; then

つまり、空ではなく0〜9(数字)で構成されていることを確認しようとします。$1つまり、誰かが入力を持っていないか、単純でscript string more_stringsパラメータがないようなscriptものの代わりにscript 12 321

それから$INPUT(私は$ 1も試しました)を整数として扱います。

if [ $INPUT -gt 100 ]; then
    INPUT=100
fi

失敗しました。エコテストで文字列があるようです(gtを使用しているにもかかわらず - 整数で評価するという意味だと仮定しますか?)。 $ 1を整数として取得または評価する方法がわかりません。 ?

http://mywiki.wooledge.org/BashFAQ/054

私はそうするように助言されました:

if [[ $1 != *[!0-9]* ]]; then

しかし、私はそこで何が起こっているのか理解していません。 0-9ではないのと同じではないですか? ? ?なぜ*?

面白いようです:

declare -i $1

しかし、$ 1が永久に変更されたと思いますか?再配置まで?

入力がA)文字列かB)数値/整数であるかを確認するために入力をテストする方法と、それをスクリプトで使用する方法(または変換方法)を知りたいです。説明を聞くのが最善です。

以前の質問についていくつか検索しようとしましたが、間違った用語を検索したようです。これは、実行方法を忘れたり、他の場所で回答したりする必要がある非常に基本的なようです。

ここでも見つかりません:

https://ss64.com/bash/test.html

たぶん就寝時間が必要かもしれません。

ベストアンサー1

の演算子は実際にはパターン一致であるため、テスト中の値はパターンと一致しません[[ .. ]]=[[ $1 != *[!0-9]* ]]$1*[!0-9]*

ここで使用されるパターンはファイル名拡張と同じであるため、*すべての文字、[abc]角かっこの間の文字、および/[!abc]または[^abc]すべての文字と一致します。いいえ括弧の間(先行!または除外^)。デフォルトでは、数字以外の$1一部の文字が含まれているかどうかをテストします。09


declare -i var変数をvar整数変数として表示します。これに対する割り当ては、算術コンテキストと同様に解釈されてdeclare -i a; a=3+5; echo $a;出力されます8。ただし、位置引数(たとえば)には使用できません$1。代わりdeclare -i $1に含まれる文字列を取得して$1使用します。それ変数名で。 ($上記の内容はありませんdeclare -i a。)

declare -i算術コンテキストの文字列は変数として扱われるため、何かが数値であるかどうかをテストするために実際には使用できません。名前。これはエラーではありません:declare -i a; b=1+2; a=b; echo $a;。代わりに印刷しますが3、これは必要なものでもそうでないかもしれません。

おすすめ記事