$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
一部の文字が含まれているかどうかをテストします。0
9
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
、これは必要なものでもそうでないかもしれません。