プロが教えるわが家の防犯対策術!

bash環境下です。

if ! [[ "$1" =~ ^[0-9]+$ ]]; then
echo "aaa!"

上のif文について意味を教えてください。
①なぜ、[[]]と2回カッコを使っているのでしょうか。
②~ は何を意味しているのでしょうか。

「^[0-9]+$」は2文字以上の数字だけの文字列の認識です。

A 回答 (1件)

bashのif文について、勉強しましょう。



https://linuxjm.osdn.jp/html/GNU_bash/man1/bash. …
https://runebook.dev/ja/docs/bash/

Linux の全てのコマンドは、実行終了時に「終了ステータス」を返します。
普通は、 0が正常終了、それ以外な正常終了ではない、となっています。
通常は、この終了ステータスは画面には出力されません。
&& || といった「前コマンドが成功/失敗したら、次コマンドを実行」というものの「成功/失敗_はこの終了ステータスを見ます。

bashのif文は、条件式が書いてあるように見えることが多いですが、実際は違います。
if コマンド ;
の形で「 コマンドが成功したらthenを失敗したらelseを実行」となっています。
このため、例えば
if rmdir temp ; # tempディレクトリを削除できたらthen,できなかったらelse
ということもできます。

では、ありがちな「$1が"abc"だったら」みたいな比較はどうするか?
それには、引数を条件式と解釈して、条件が成立していたら正常終了する(終了ステータス=0)というコマンドを使用します。

よく使われるコマンドに test があります。
[ はtestの別名です。 コマンドっぽく見えませんが「 [ コマンド」です。
https://runebook.dev/ja/docs/bash/bourne-shell-b …

そして、 [[ ]] は、 test [ コマンドとは同様の条件式を扱う複合コマンドです。
扱える条件式や 展開の有無 等に違いがあります。
https://runebook.dev/ja/docs/bash/conditional-co …


> ①なぜ、[[]]と2回カッコを使っているのでしょうか。
・[[ ]] の条件式を使いたいから

> ②~ は何を意味しているのでしょうか。
[[ ]] の中は空白で区切られています。逆に、空白が無ければ1まとまりと解釈します。
よって、 ~ ではなく =~ です。
=~ については [[ ]] のマニュアルを読みましょう

> 「^[0-9]+$」は2文字以上の数字だけの文字列の認識です。
違います
正規表現を勉強しましょう
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!