web-dev-qa-db-ja.com

Fish Shellで文字列の等価性/文字列比較をテストしますか?

Fishの2つの文字列(他の言語の"abc" == "def"など)をどのように比較しますか?

これまでのところ、私はcontainsの組み合わせを使用しました(contains "" $a0を返すのは、$aが空の文字列である場合のみです。すべてのケースで私のために働く)とswitchcase "what_i_want_to_match"case '*'を使用)。これらの方法はどちらも特に...正しいとは思われません。

42
Leigh Brenecki
  if [ "abc" != "def" ] 
        echo "not equal"
  end
  not equal

  if [ "abc" = "def" ]
        echo "equal"
  end

  if [ "abc" = "abc" ]
        echo "equal"
  end
  equal

または1つのライナー:

if [ "abc" = "abc" ]; echo "equal"; end
equal
44
Keith Flower

testのマニュアルにはいくつかの役立つ情報があります。 man testで利用できます。

Operators for text strings
   o STRING1 = STRING2 returns true if the strings STRING1 and STRING2 are identical.

   o STRING1 != STRING2 returns true if the strings STRING1 and STRING2 are not
     identical.

   o -n STRING returns true if the length of STRING is non-zero.

   o -z STRING returns true if the length of STRING is zero.

例えば

set var foo

test "$var" = "foo" && echo equal

if test "$var" = "foo"
  echo equal
end

testの代わりに[および]を使用することもできます。

空の文字列または未定義の変数を確認する方法は次のとおりです。これらは魚では偽物です。

set hello "world"
set empty_string ""
set undefined_var  # Expands to empty string

if [ "$hello" ]
  echo "not empty"  # <== true
else
  echo "empty"
end

if [ "$empty_string" ]
  echo "not empty"
else
  echo "empty"  # <== true
end

if [ "$undefined_var" ]
  echo "not empty"
else
  echo "empty"  # <== true
end
12
Dennis