在python中我可以编写以下代码:
if (result := some_function()) > 0:
# do some thing with result
在 Bash 脚本中可以实现吗?
答案1
是的,但最好不要只用一句话。
if foo=$(bar); [[ $foo == 42 ]]; then
这与以下情况没有太大区别:
foo=$(bar); if [[ $foo == 42 ]]; then
您可以将任何东西放入if
条件中,包括整个另一个if
块或case
任何其他内容,只要它是有效的 Bash 代码即可。最后一个命令的状态将作为条件进行检查。
如果您确实想要一个语句,那么“assign default”扩展可能会被滥用,如果变量尚未设置任何内容 - 但是请不要在其他人必须阅读的脚本中这样做。(就此而言,也不要使用 Python 示例。仅仅因为您可以编写某段代码,并不意味着您应该这样做。)
if [[ ${foo:=$(bar)} == 42 ]]; then
答案2
这是一种有用的技术,可以捕获输出并根据命令执行操作退出状态:
if result=$(some command); then
echo "'some command' succeeded and produced the following output:"
echo "$result"
else
echo "'some command' failed and produced the following output:"
echo "$result"
fi