[解決済み] 文字列が有効な整数であるかどうかをテストする
質問
私は一般的なことをしようとしています。シェル スクリプトでユーザー入力を解析します。ユーザーが有効な整数を提供した場合、スクリプトは 1 つのことを行い、有効でない場合は他のことを行います。問題は、これを行う簡単な (そして適度にエレガントな) 方法をまだ見つけられていないことです - 文字ごとに分解する必要はありません。
これが簡単でなければならないことは分かっていますが、方法が分かりません。1 ダースもの言語でそれを行うことができましたが、BASH ではできません!
調べてみると、こんなものがありました。
文字列が基数10の有効な実数から構成されているかどうかをテストする正規表現
そして、そこには正規表現について語る回答がありますが、私の知る限り、それはCで利用可能な関数です(他の関数と比較して)。それでも、それは素晴らしい答えのように見えたので、私はそれをgrepで試してみましたが、grepはそれをどうしたらいいのかわかりませんでした。私のマシンでは、PERL正規表現として扱うことを意味する-Pを試しましたが、ダメでした。ダッシュE(-E)もうまくいかなかった。そして、-Fもダメでした。
はっきりさせておきたいのですが、私はこのようなことを試して、何か出力がないか探しています。(つまり、有効な行が繰り返される一方で、不適合な入力は何も返さないと予想していました。)
snafu=$(echo "$2" | grep -E "/^[-+]?(?:\.[0-9]+|(?:0|[1-9][0-9]*)(?:\.[0-9]*)?)$/")
if [ -z "$snafu" ] ;
then
echo "Not an integer - nothing back from the grep"
else
echo "Integer."
fi
どなたか、これが最も簡単にできる方法を教えていただけませんか?
率直に言って、これはTESTの欠点だと私は思います。このようなフラグを持つべきです。
if [ -I "string" ] ;
then
echo "String is a valid integer."
else
echo "String is not a valid integer."
fi
どのように解決するのですか?
[[ $var =~ ^-?[0-9]+$ ]]
-
は
^
は入力パターンの先頭を示します。 -
は
-
はリテラルな "-" です。 -
は
?
は、0または1個の先行する(-
)"を意味します。 -
は
+
は、"前の1つ以上の([0-9]
)"を意味する。 -
は
$
は入力パターンの終わりを示します。
つまり、正規表現がマッチするのはオプションの
-
(負の数の場合)、その後に一つ以上の小数点以下の数字が続きます。
参考文献 :
関連
-
[解決済み] OCamlでcharから文字列に変換する
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] JavaScriptで文字列を整数に変換する方法は?
-
[解決済み] Pythonで整数から文字列に変換する
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] シェル文字列不正置換
-
[解決済み] 一見、空のファイルや文字列がmd5sumを生成するのはなぜですか?
-
[解決済み] デリミタによる文字列の分割
-
[解決済み] Bashで変数が数値であるかどうかをテストするにはどうすればよいですか?
-
[解決済み】Goで空の文字列をテストする最良の方法は何ですか?
-
[解決済み】文字列リテラルに対して文字列をマッチングさせる方法は?
-
[解決済み】ある文字列が他の文字列を含むかどうかを確認する
-
[解決済み】文字列を一定の長さまで繰り返す
-
[解決済み] sqliteでパディングを含む文字列を連結する方法
-
[解決済み】ユニコード1文字には何バイトかかりますか?