Lin*_*eak 0 shell posix brace-expansion
我正在对我的 POSIX shell 代码进行年度审查。
我可能发现了一个奇怪的行,我以前并不了解它:
[ $# -eq 3 ] && exit_code=$3 || exit_code=1
Run Code Online (Sandbox Code Playgroud)
exit_code=${3:-1}
Run Code Online (Sandbox Code Playgroud)
这两种方法在提供结果方面是否完全相同?
请详细说明是否有任何区别?
这两种方法似乎使用不同的逻辑:
[ $# -eq 3 ] && exit_code=$3 || exit_code=1
Run Code Online (Sandbox Code Playgroud)
这将,当且仅当,位置参数 ( $#)的数量正好等于三个时,将exit_code变量设置为等于第三个位置参数的值;否则应设置为等于1。
exit_code=${3:-1}
Run Code Online (Sandbox Code Playgroud)
这将设置exit_code于第三位置参数(或到的值1而不管是否存在如果不设置它)多于3个位置参数。
总结一下:exit_code如果位置参数的数量不是正好三个,则第一个将设置为 1;第二个与位置参数的数量无关。