在 Bash 中,可以在一行中进行赋值和测试吗?

在 Bash 中,可以在一行中进行赋值和测试吗?

在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

相关内容