我有这个函数
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}
}