我的更简单的 shell 片段与原始的相同吗?

我的更简单的 shell 片段与原始的相同吗?

我正在对我的 POSIX shell 代码进行年度审查。

我可能找到了一个诡异的线,我之前不太了解:

原来的

[ $# -eq 3 ] && exit_code=$3 || exit_code=1

新代码 - 更简单

exit_code=${3:-1}

这两种方法提供的结果是否完全相同?

请详细说明一下有什么不同吗?

答案1

这两种方法似乎使用不同的逻辑:

[ $# -eq 3 ] && exit_code=$3 || exit_code=1

这会,当且仅当,位置参数 ( ) 的数量$#正好等于 3,将exit_code变量设置为等于第三个位置参数的值;否则应设置为等于1

exit_code=${3:-1}

这将设置exit_code为第三个位置参数的值(1如果未设置,则设置为),无论是否有多于三个位置参数。


exit_code总结一下:如果位置参数的数量不是三个,则第一个将设置为 1;第二个与位置参数的数量无关。

相关内容