在变量中存储bash字符串比较

cmh*_*cmh 12 bash

我想在变量中存储bash字符串比较的结果,效果等同于:

if [[ $a == $b ]]; then
    res=1
else
    res=0
fi
Run Code Online (Sandbox Code Playgroud)

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

res2=$('$a'=='$b') #Not valid bash
Run Code Online (Sandbox Code Playgroud)

有没有办法实现我想要的,而不是推迟if构造?

twa*_*erg 15

我建议:

res=0; [ "$a" == "$b" ] && res=1
Run Code Online (Sandbox Code Playgroud)

要么

res=1; [ "$a" == "$b" ] || res=0
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢你的建议.我认为在这种形式中我宁愿选择`["$ a"=="$ b"] && res = 1 || res = 0`因为它有更熟悉的c风格三元结构. (4认同)

Tim*_*ote 5

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

res="$( [[ $a == $b ]]; echo $? )"
Run Code Online (Sandbox Code Playgroud)

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

if [[ $a == $b ]]; then
  res=0
else
  res=1
fi
Run Code Online (Sandbox Code Playgroud)

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

也不是说我完全赞成这种解决方案。这是很黑客的而且有点不清楚。但它很简洁,而且简洁正是您所要求的。