Czy istnieje sposób, aby KSH opuścił skrzynię?oświadczenie i przejść do pewnej linii do następnego wykonania z kodem? A może masz etykiety goto? Coś takiego jak to używane zamiast gniazdowania ton rozgałęzień?
Odpowiedzi:
2 dla odpowiedzi № 1Nie ma etykiet ani goto. Możesz jednak wyjść z głęboko zagnieżdżonej pętli, przekazując liczbę do wbudowanego "break": break 2, aby wyjść z dwóch poziomów, przerwać 3, aby wyjść z trzech poziomów itd.
3 dla odpowiedzi № 2
Chociaż zawsze pomaga opublikować uproszczonyprzykład twojego problemu (ale który obejmuje wszystkie nieprzewidziane sytuacje), biorąc pod uwagę odpowiedź na komentarz do Mark Read, możesz zawijać zapytanie o wejście do pętli while, np.
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
# ....
Zgadzam się również z Markiem, bez etykiet i gotów w ksh.
Mam nadzieję, że to pomoże.
0 dla odpowiedzi № 3
Istnieje implementacja bash goto, jeśli chcesz ją zaadaptować do ksh (do tej pory nie byłem)
#!/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