Bourne 쉘 스크립트에서 행 번호 얻기

Bourne 쉘 스크립트에서 행 번호 얻기

쉘 스크립트에서 현재 줄 번호를 인쇄하고 싶습니다. $LINENOBash 쉘의 변수 에 대해 알고 있지만 Bourne 쉘에는 존재하지 않는 것 같습니다. 줄 번호를 얻는 다른 변수나 방법이 있습니까?

답변1

LINENOksh의 기능이며 bash 및 zsh에도 있습니다. Bourne 쉘, POSIX 사양 또는 대시에는 그러한 기능이 없습니다. 줄 번호가 필요한 경우 해당 기능이 있는 셸에서 스크립트가 실행되는지 확인하세요. 대부분의 시스템은 bash 또는 ksh를 제공합니다.

if [ -z "$LINENO" ]; then
  if type ksh >/dev/null 2>/dev/null; then
    exec ksh "$0" "$@"
  elif type bash >/dev/null 2>/dev/null; then
    exec ksh "$0" "$@"
  else
     echo 1>&2 "$0: Fatal error: unable to find a shell that supports LINENO."
     exit 100
  fi
fi

답변2

할 수 있다스크립트 후처리

awk '{gsub(/[$]LINENO/,FNR);print}' script_template > script

하지만 대개 문제가 발생합니다템플릿은 유지되어야 하며 편집이 이루어질 때마다 스크립트가 생성되어야 합니다.

관련 정보