[az] アスタリスクが数字と一致するのはなぜですか?

[az] アスタリスクが数字と一致するのはなぜですか?

現在のパスには3つのディレクトリがあります。

$ls
a_0db_data  a_clean_0db_data  a_clean_data
$ls a_*_data
a_0db_data:

a_clean_0db_data:

a_clean_data:

$ls a_[a-z]*_data
a_clean_0db_data:

a_clean_data:

最後のlsコマンドはのみ一致すると予想しましたa_clean_data。なぜ含まれているコマンドと一致するのですか0

bash --version
GNU bash, version 4.2.24(1)-release (i686-pc-linux-gnu)

ベストアンサー1

部品が[a-z]数値と一致しません。これは*シェルに対して混乱する可能性があります。ワイルドカードそして一般的な表現

grepさまざまな種類の正規表現を許可するツール(基本的なデフォルトで-Eは拡張の-P場合パール正規表現)

たとえば(逆-v一致)

$ ls a_[a-z]*_data | grep -v "[0-9]"
a_clean_data

bash正規表現を使用する場合は、$ref変数が整数であるかどうかをテストする方法の例を次に示します。

re='^[0-9]+$'
if ! [[ $ref =~ $re ]] ; then
  echo "error"
fi

おすすめ記事