호출자 명령을 사용하여 bash 스크립트에서 줄 번호만 반환하는 방법은 무엇입니까?

호출자 명령을 사용하여 bash 스크립트에서 줄 번호만 반환하는 방법은 무엇입니까?

초보자 질문입니다. 누군가가 도움을 줄 수 있기를 바랍니다.

오류 검사 기능이 내장된 bash 스크립트에 함수를 작성하고 있습니다. 줄 번호가 포함된 오류 메시지를 반환하고 싶습니다.

Error, parameter not provided, please check line 57

명령 을 찾았 caller지만 이것이 반환됩니다.

57 filename.sh

숫자만 추출하기 위해 정규식을 사용하는 방법을 생각해 보았지만 이는 과도한 것 같고 호출자 명령 자체에는 줄 번호만 반환하는 옵션이 없는 것 같습니다.

bash에서 내가 원하는 것만 반환하는 방법이 있나요?

호출이 라인 50, 500 또는 5000에 있을 수 있으므로 왼쪽 x 문자에서 가져오는 것은 작동하지 않습니다.

답변1

callerin 지시문은 bash공백으로 구분된 두 개의 값, 즉 호출자의 줄 번호와 파일 이름을 반환합니다. 예를 들어,

57 filename.sh

여기서 해야 할 일은 첫 번째 매개변수를 선택하는 것뿐입니다. awk이 작업은 매우 쉽게 수행할 수 있습니다.

caller | awk '{ print $1 }'

결과

57

답변2

텍스트를 보고 help caller텍스트의 첫 번째 단어인 줄 번호를 반환합니다.

bash read 명령을 사용하여 단어로 분할할 수 있습니다.

read lineno rest <<< "$(caller)"

정규식을 사용하면 그렇게 번거롭지 않습니다.

[[ $(caller) =~ ^([[:digit:]]+) ]] && lineno=${BASH_REMATCH[1]}

#!/bin/bash
                                          # line 2
a() { b; }                                # line 3
b() { c; }                                # line 4
c() {                                     # line 5
    caller                                # line 6
    out=$(caller); echo "$out"            # line 7
    i=0                                   # line 8
    while true; do                        # line 9
        c=$(caller $i)                    # line 10
        [[ -z "$c" ]] && break            # line 11
        printf '%d = %s\n' $((i++)) "$c"  # line 12
    done                                  # line 13
}                                         # line 14
a                                         # line 15

산출

4 caller.sh
4 caller.sh
0 = 4 b caller.sh
1 = 3 a caller.sh
2 = 15 main caller.sh

관련 정보