1. ホーム
  2. string

[解決済み] Bashで、文字列がある値で始まっているかどうかを確認するにはどうすればよいですか?

2022-03-17 23:12:31

質問

ある文字列が"node"で始まっているかどうかをチェックしたい。以下のようなものです。

if [ $HOST == user* ]
  then
  echo yes
fi

どうすれば正しくできるのでしょうか?


さらに、HOSTが"user1"か"node"で始まるかどうかをチェックするために式を組み合わせる必要があります。

if [ [[ $HOST == user1 ]] -o [[ $HOST == node* ]] ];
then
echo yes
fi

> > > -bash: [: too many arguments

どうすれば正しくできるのでしょうか?

どのように解決するのですか?

このスニペットは Bashスクリプトの上級ガイド にはこう書かれています。

# The == comparison operator behaves differently within a double-brackets
# test than within single brackets.

[[ $a == z* ]]   # True if $a starts with a "z" (wildcard matching).
[[ $a == "z*" ]] # True if $a is equal to z* (literal matching).

というわけで、持っていたのは ほぼ は正しいが、必要なのは ダブル で囲んでいます。


2つ目の質問に関してですが、このように書くことができます。

HOST=user1
if  [[ $HOST == user1 ]] || [[ $HOST == node* ]] ;
then
    echo yes1
fi

HOST=node001
if [[ $HOST == user1 ]] || [[ $HOST == node* ]] ;
then
    echo yes2
fi

と表示されます。

yes1
yes2

Bashの if の構文は慣れるまで大変です(IMO)。