0

変数が数値/整数かどうかをテストする興味深い Bash スクリプトを見つけました。好きだけど「0」が数字として認識されない理由が分からない?著者にはお尋ねできません。こんにちは、匿名です。

#!/bin/bash

n="$1"

echo "Test numeric '$n' "
if ((n)) 2>/dev/null; then
n=$((n))
echo "Yes: $n"
else
echo "No: $n"
fi

ありがとうございました!

更新 - 2012 年 4 月 27 日。

これは私の最終的なコードです(短いバージョン):

#!/bin/bash

ANSWER=0
DEFAULT=5
INDEX=86

read -p 'Not choosing / Wrong typing is equivalent to default (#5): ' ANSWER;

shopt -s extglob
if [[ $ANSWER == ?(-)+([0-9]) ]]
  then ANSWER=$((ANSWER));
  else ANSWER=$DEFAULT;
fi

if [ $ANSWER -lt 1 ] || [ $ANSWER -gt $INDEX ]
  then ANSWER=$DEFAULT;
fi
4

2 に答える 2

4

数値/整数かどうかはテストしません。n が true または false に評価されるかどうかをテストし、0 の場合は false、そうでない場合 (数値またはその他の文字列) は true です。

于 2012-04-24T19:48:52.610 に答える
1

パターンマッチングを使用してテストします。

if [[ $n == *[^0-9]* ]]; then echo "not numeric"; else echo numeric; fi

ただし、これは負の整数とは一致せず、空の文字列を数値として誤って一致させます。より正確なパターンを得るには、シェルの拡張グロブを有効にします。

shopt -s extglob
if [[ $n == ?(-)+([0-9]) ]]; then echo numeric; else echo "not numeric"; fi

そして、小数に一致させるために

[[ $n == @(?(-)+([0-9])?(.*(0-9))|?(-)*([0-9]).+([0-9])) ]]
于 2012-04-24T20:03:18.900 に答える