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

しかし、通常問題が発生しますテンプレートは保持し、編集が行われるたびにスクリプトを生成する必要があります。

関連情報