在Fish shell中测试字符串相等/字符串比较?

时间:2012-06-19 21:36:57

标签: fish

如何比较Fish中的两个字符串(如其他语言中的"abc" == "def")?

到目前为止,我使用了contains的组合(如果contains "" $a是空字符串,0仅返回$a,尽管没有似乎在所有情况下对我都有效)和switchcase "what_i_want_to_match"case '*')。但是,这两种方法都不是特别正确的。

2 个答案:

答案 0 :(得分:41)

  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

答案 1 :(得分:10)

有时您想检查空字符串未定义变量,这些都是鱼类中的虚假信息。

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

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

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

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

您也可以使用test代替[

一个实际的例子是检查你是否在git分支中。

function git_branch
  echo (command git symbolic-ref HEAD ^/dev/null | sed -e 's|^refs/heads/||')
end

set --local branch_name (git_branch)

if [ $branch_name ]
  echo "$branch_name branch checked out"
else
  echo "not in a git repo"
end