Подтвердить что ты не робот

Тест для сравнения строк/строк в оболочке Fish?

Как вы сравниваете две строки в Fish (например, "abc" == "def" на других языках)?

До сих пор я использовал комбинацию contains (получается, что contains "" $a возвращает только 0, если $a - пустая строка, хотя это, казалось, не работало для меня во всех случаях ) и switch (с a case "what_i_want_to_match" и a case '*'). Ни один из этих методов не кажется особенно... правильным, однако.

4b9b3361

Ответ 1

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

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

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

или один вкладыш:

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

Ответ 2

В руководстве по 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