我正在对我的 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;第二个与位置参数的数量无关。