在KSH中是否有办法退出case语句并使用代码转到某行以进行下一次执行?或者你可以使用goto标签吗?这样的东西用来代替嵌套大量的分支?
答案 0 :(得分:3)
虽然发布问题的简化示例总是有帮助的(但这涵盖了您期望的所有意外情况),但鉴于您对Mark Read的评论回复,您可以将输入的提示包装到while循环中,例如
while ${keepTrying:-true} ; do
echo "enter Yes or No"
read yOrN
case "${yOrN} in
[Yy]* )
# do something
keepTrying=false
;;
[Nn]* )
# do something else
keepTrying=false
;;
* )
echo "bad input"
;;
esac
done
# continue with script
# ....
另外,我同意Mark,ksh中没有标签或者搞砸。
我希望这会有所帮助。
答案 1 :(得分:2)
没有标签或转到。但是,您可以通过将数字传递给内置的“break”来退出深度嵌套的循环:break 2退出两个级别,break 3退出三个级别等等。
答案 2 :(得分:0)
有一个bash goto实现,如果你想让它适应ksh(我还没有到目前为止)
#!/bin/bash
function gowto
{
label=$1
# works in Linux bash, but barks in ksh
cmd=$(sed -n "/#$label:/{:a;n;p;ba};" $0 | grep -v ':$')
#
eval "$cmd"
exit
}
echo step 1
gowto skip
echo To be skippped
#skip:
echo Step 2