シェルスクリプトのテキストにASCII以外の文字が含まれていることを確認してください。

シェルスクリプトのテキストにASCII以外の文字が含まれていることを確認してください。

ファイルがあり、そのファイルに英語のASCII文字のみが含まれていることを確認したいと思います。

とてもよくある質問のようですが、グーグルをしてみると直接的な回答や関連内容がありませんでした。

他の質問によると、これはこれまでに得たものですが、うまくいきません。 ASCII 文字であるか非 ASCII 文字であるかに関係なく、常に非 ASCII 文字であると判断されます。

if (LC_ALL=C; [[ $TEXT = *[[:ascii:]]* ]]) then
  echo "Contain Non-ASCII"
fi

ところで、これはシェルスクリプトです。

ベストアンサー1

コードは、変数値にTEXT少なくとも1つのASCII文字が含まれているかどうかをテストします。 ASCII以外の文字が含まれているかどうかをテストするには、$TEXTコレクションを逆にする必要があります。ところで、[:ascii:]ロケールとは何の関係もないので設定する必要はありませんLC_CTYPE

if [[ $TEXT = *[![:ascii:]]* ]]; then
  echo "Contain Non-ASCII"
fi

これは[:ascii:]bash(およびzsh)機能です。スクリプトがkshまたは通常のshで動作するようにするには、ロケールを使用する必要があります。移植可能な方法は次のとおりです。

LC_CTYPE=C
case $TEXT in
  *[![:cntrl:][:print:]]*) echo "Contain Non-ASCII";;
esac

ファイルの内容を確認するには、次のようにします。grep

if LC_ALL=C grep -q '[^[:cntrl:][:print:]]' somefile; then
  echo "Contain Non-ASCII"
fi

おすすめ記事