Unix Bash - 将if/else赋值给变量

8

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

例如:

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

fi)

当我在一个脚本中添加 $mathstester,并按如下方式排列时:
echo "Equation: $mathstester"

它应该显示:
Equation: Equal

我需要重新布局吗?这可行吗?

你在尝试做什么?你的if语句缺少一个fi - Jason Hu
抱歉,忘记在这里添加了。 - space149
那不是if的正确语法。这样写才对:x = $(if [ 2 = 2 ]; then echo equal; else echo "not equal; fi)。参考https://www.gnu.org/software/bash/manual/bash.html#Conditional-Constructs。请注意大小写敏感--`If`和`if`是不同的。 - Ulfalizer
如果您想在一行中输出内容,您需要使用 echo -n text - Jason Hu
请看一下:http://www.shellcheck.net/ - Cyrus
2个回答

15

正确使用 if 的方法是:

mathtester=$(if [ 2 = 2 ]; then echo "equal"; else echo "not equal"; fi)

如果您要在多行语句中使用它,您可以考虑查看此链接


如果我有一个名为$number的变量,它的值为5,那么我该如何将其放入if语句中? - space149
读一下Bash基础知识怎么样?http://www.tldp.org/LDP/Bash-Beginners-Guide/html/ - baky

12

if语句放在赋值语句里面是很笨拙并易错的。更标准的方式是把赋值语句放在if语句里面:

if [ 2 = 2 ]; then
    mathstester="equal"
else
    mathstester="not equal"
fi

关于测试变量,你可以使用类似于 if [ "$b" = 2 ](这将进行字符串比较,所以例如如果 b 是 "02",它将不等于 "2")或者if [ "$b" -eq 2 ],它执行数字比较(仅限整数)。如果你实际上使用的是 bash(而不仅仅是通用的 POSIX shell),你还可以使用 if [[ "$b" -eq 2 ]](类似于 [ ],但其语法更清晰,适用于更复杂的表达式),以及 (( b == 2 ))(这些只执行数字表达式,并具有非常不同的语法)。有关更多详细信息,请参见BashFAQ#31:test、[和[[之间的区别是什么?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接