bash 中是否存在用于退出代码扩展的 shorthand?

Does a shorthand exist in bash for exit code expansion?

我正在寻找一种方法来缩短这段代码以删除 echo $?部分。

case 0 in  
    $( [[ -e /path/to/file/a ]]; echo $?) ) echo a ;;   
    $( [[ -e /path/to/file/b ]]; echo $?) ) echo b ;;  
esac  

感觉 bash 应该有一种方法可以扩展到命令退出值,而不必包含额外的 echo 语句。

我花了 30 分钟谷歌搜索命令扩展,但我没有找到任何可以消除上述示例回声的东西。

可能这只是一厢情愿,但无论如何我都希望得到一个明确的答案或听到任何评论。

也许我遗漏了什么,但不会像

if [ -e /path/to/file/a ]; then
  echo a
elif [ -e /path/to/file/b]; then
  echo b
fi

for f in a b; do
  if [ -e /path/to/file/"$f" ]; then
    echo $f
    break
  fi
done

是更直接的方法吗?

如果您需要处理越来越多的位置列表,我特别喜欢第二种方法,因为它允许您在脚本的开头而不是代码中更深的地方定义列表:

locations=( '/path/to/file/a' '/path/to/file/b' )

declare -a locations=()
locations+=('/path/to/file/a')
locations+=('/path/to/file/b')

您可以通过在 if 语句中嵌套 case 语句以不同的方式处理不同的位置,这样它仅在该位置确实存在时才适用:

for f in "${locations[@]}"; do
  if [ -e "$f" ]; then
    case "$f" in
      '/path/to/file/b')
        su -c "..." - someuser
        ;;
      *)
        echo "$f"
        ;;
    esac
    break
  fi
done