Unix Bash - 将 if/else 分配给变量

spa*_*149 3 unix bash

我一直在创建将 if/else 的输出分配给一个变量,但一直出现错误。

例如:

mathstester=$(If [ 2 = 2 ]
Then echo equal
Else
echo "not equal"

fi)
Run Code Online (Sandbox Code Playgroud)

所以每当我添加$mathstester脚本时,布局如下:

echo "Equation: $mathstester"
Run Code Online (Sandbox Code Playgroud)

它应该显示:

Equation: Equal
Run Code Online (Sandbox Code Playgroud)

我需要以不同的方式布置它吗?甚至有可能吗?

Gor*_*son 7

把if语句放在赋值语句中比较笨拙,容易出错。更标准的方法是将赋值放在if:

if [ 2 = 2 ]; then
    mathstester="equal"
else
    mathstester="not equal"
fi
Run Code Online (Sandbox Code Playgroud)

至于测试变量,您可以使用类似if [ "$b" = 2 ](它将进行字符串比较,例如,如果 b 是“02”,它将不等于“2”)或if [ "$b" -eq 2 ],它进行数字比较(仅限整数)。如果您实际上正在使用 bash(不仅仅是一个通用的 POSIX shell),您还可以使用if [[ "$b" -eq 2 ]](类似于[ ],但对于更复杂的表达式使用更简洁的语法)和(( b == 2 ))(这些仅用于数字表达式,并且具有非常不同的语法)。请参阅BashFAQ #31: test, [ 和 [[ 之间有什么区别?更多细节。


bak*_*aky 6

正确的使用方法if是:

mathtester=$(if [ 2 = 2 ]; then echo "equal"; else echo "not equal"; fi)
Run Code Online (Sandbox Code Playgroud)

要在多行语句中使用它,您可能会考虑查看link。