Хранить bash сравнение строк в переменной

Я хочу сохранить результат сравнения bash в переменной, с эффектом, эквивалентным:

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

Я надеялся написать что-то вроде terser, например:

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

Есть ли способ достичь того, что я хочу, не откладывая на конструкцию if?

Ответ 1

Я бы предложил либо:

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

или

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

Не так просто, как вы надеялись, но избегайте if ... else ... fi.

Ответ 2

Вы также можете использовать переменную $?, которая содержит возвращаемое значение из предыдущей команды:

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

Хотя это будет инвертировать числа, которые вы дали. Конечный результат будет таким же, как:

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

Это потому, что оболочка интерпретирует возвращаемое значение 0 как true и 1 как false.

Не говоря, я полностью защищаю это решение. Он взламывает и немного неясен. Но это краткое и краткое то, о чем вы просили.

Ответ 3

Вот еще один вариант.

$> test "foo" = "bar"; res=$?
$> echo $res
1
$> test "foo" = "foo"; res=$?
$> echo $res
0