내 바탕 화면에 윈도우에서 리눅스로 이동할 때, 나는 기존의 많이했다 .BAT및 .CMD변환 할 파일을 내가 그들을 위해 논리를 재 작성하지 않을, 그래서 내가 발견 을 할 수있는 방법 goto때문에 작동 배쉬를 goto함수는 sed자체적으로 실행 되어 실행해서는 안되는 스크립트 부분을 제거하고 모든 것을 회피합니다.
#!/bin/bash
# BAT / CMD goto function
function goto
{
label=$1
cmd=$(sed -n "/^:[[:blank:]][[:blank:]]*${label}/{:a;n;p;ba};" $0 |
grep -v ':$')
eval "$cmd"
exit
}
apt update
# Just for the heck of it: how to create a variable where to jump to:
start=${1:-"start"}
goto "$start"
: start
goto_msg="Starting..."
echo $goto_msg
# Just jump to the label:
goto "continue"
: skipped
goto_msg="This is skipped!"
echo $goto_msg
: continue
goto_msg="Ended..."
echo "$goto_msg"
# following doesn't jump to apt update whereas original does
goto update
Linus Torvalds가 유명하게 말한 것처럼 나는 죄책감을 느끼지 않습니다.
From : Linus Torvalds
주제 : Re : 2.6.0-test *의 기회가 있습니까?
날짜 : 2003 년 1 월 12 일 일요일 11:38:35 -0800 (PST)
나는 goto가 훌륭하다고 생각하며, 많은 양의 들여 쓰기보다 읽기 쉽습니다. 그건 특히 코드의 흐름이 실제로 자연스럽게 들여 쓰기되지 않은 경우는 true (이이 경우에, 그래서 고토를 사용하여 어떤 방식으로 생각하지 않습니다 명확 하지 않는 것보다,하지만 일반적으로 고토에서의 가독성을 위해 아주 좋은 수 있습니다).
물론 레이블을 설명 할 수없는 파스칼과 같은 어리석은 언어에서는 goto가 잘못 될 수 있습니다. 그러나 그것은 goto의 잘못이 아니며, 언어 디자이너의 두뇌 손상입니다.
코드 소스 (오류가 덜 발생하도록 수정)
견적 소스
while $a==0another_thing이 올바르게 읽 히면 $ a를 1로 변경하십시오.