在 CASE 语句之后继续函数



我有这个函数

function doit {
  echo " Do you want to continue? {y/n} "
  case $opt in
    y) ??????
    n) exit ;;
  esac
  echo " 32b or 64b? {32/64} "
  case $opt in
    32) do32 ;;
    64) do64 ;;
  esac
}

我该如何完成这项工作?选择"是"后,我需要继续在同一函数中前进。

这是非常不清楚的,但我想你的意思

doit () {
   read -p " Do you want to continue? {y/n} " opt
   case $opt in
     y) ;;
     n) return 1 ;;
   esac
   read -p " 32b or 64b? {32/64} " opt
   case $opt in
    32) do32 ;;
    64) do64 ;;
   esac
}

y情况下什么都不做的选择似乎是您问题的答案。但也请注意使用 return 而不是 exit 来离开函数,函数声明中没有 function 关键字(这实际上只是一个偏好问题;但我看不到仅 Bash 语法变体的优势(,以及使用 read 来读取输入(我想这就是你想要的?(。return参数1向调用者发出失败信号,因此您可以说例如

doit || echo "$0: doit failed or aborted" >&2

严格来说,第一个case只需要一个n分支;你会注意到,如果答案不是n也不是y,代码就会失败,这种行为实际上也适用于y的情况。如果不是这种情况,则可以使用最终*)情况来处理所有未处理的值。

当您只关心其中一个分支时,我不会使用 case 语句:

function doit {
    read -p " Do you want to continue? {y/n} " ans
    [[ $ans == [nN]* ]] && return 1
    PS3=" 32b or 64b? "
    select size in 32 64; do
        case $size in
            32|64) break ;;
        esac
    done
    do${size}
}

最新更新