Тест для сравнения строк/строк в оболочке Fish?
Как вы сравниваете две строки в Fish (например, "abc" == "def"
на других языках)?
До сих пор я использовал комбинацию contains
(получается, что contains "" $a
возвращает только 0
, если $a
- пустая строка, хотя это, казалось, не работало для меня во всех случаях ) и switch
(с a case "what_i_want_to_match"
и a case '*'
). Ни один из этих методов не кажется особенно... правильным, однако.
Ответы
Ответ 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