文が条件で始まらないことを確認するには?

文が条件で始まらないことを確認するには?

以下のように状況を確認したいと思います。行は# 次の記号で始まってはいけません。

if[ ! ["$Line" == "#*"] ]; then

しかし、これはうまくいきません。

答え1

コードスニペットには多くの問題がありますが、デフォルトでは構文は[![...]]無効です。 bash(および他の多くのシェル)では、[[他の文字に分割できない単一のコマンドです。

代わりに、恒等演算子を否定できます。

if [[ "$LINE" != \#* ]]; then echo yes; fi

また、括弧の周りのスペースを注意深く見てください。

答え2

変数に文字列があり、文字で始まらない場合は、lineその文字列を出力したいとします。以下の例では条件が満たされない場合でも出力しています。yes#no

case $line in
    "#"*) echo no
esac

このcaseステートメントは変数を使用し、任意の数の(ワイルドカード)パターンを使用して変数値と一致するパターンのコードを実行します。この場合、パターン"#"*#コメントを導入するように見えないように引用符で囲む必要があります)を一致させようとし、一致した場合はecho文を実行します。

より多くのパターンがある場合は、最後のパターンを除くすべてのコードはで終わる必要があります;;

case $line in
    "#"*) echo no ;;
    *)    echo yes
esac

...そしてパターンのコードは空であるかもしれません。

case $line in
    "#"*) ;;
    *)    echo yes
esac

シェルはまた、bash演算子を介してglobとパターンマッチングを実行します。[[ ... ]]==

if [[ $line != "#"* ]]; then
    echo yes
else
    echo no
fi

では、bash正規表現を使用して=~次の演算子と一致させることもできます[[ ... ]]

if ! [[ $line =~ ^# ]]; then
    echo yes
else
    echo no
fi

または

if [[ $line =~ ^[^#] ]]; then
    echo yes
else
    echo no
fi

ファイルを 1 行ずつ解析する場合、シェルはその操作に適したツールではありません。代わりに、次のものを使用できますawk

awk '/^[^#]/ { print yes }' <inputfile

関連:

関連情報