15

我想将 bash 字符串比较的结果存储在一个变量中,效果相当于:

if [[ $a == $b ]]; then
    res=1
else
    res=0
fi

我希望能够写一些更简洁的东西,比如:

res2=$('$a'=='$b') #Not valid bash

有没有一种方法可以实现我想要的,而无需遵循 if 构造?

4

3 回答 3

20

我会建议:

res=0; [ "$a" == "$b" ] && res=1

或者

res=1; [ "$a" == "$b" ] || res=0

不像您希望的那么简单,但确实避免了if ... else ... fi.

于 2012-11-09T16:45:32.447 回答
4

您还可以使用$?包含上一个命令的返回值的变量:

res="$( [[ $a == $b ]]; echo $? )"

尽管这会与您给出的数字相反。最终结果将与以下内容相同:

if [[ $a == $b ]]; then
  res=0
else
  res=1
fi

这是因为 shell 将返回值解释0为 true 和1false。

并不是说我也完全赞成这种解决方案。这是hackish,有点不清楚。但它很简洁,简洁就是你所要求的。

于 2012-11-09T16:55:27.793 回答
0

这是另一种选择。

$> test "foo" = "bar"; res=$?
$> echo $res
1
$> test "foo" = "foo"; res=$?
$> echo $res
0
于 2019-07-25T15:09:33.560 回答