シェルスクリプトから現在の行番号を印刷したいです。$LINENO
Bashシェルの変数について知っていますが、Bourneシェルには存在しないようです。行番号を取得する他の変数や方法はありますか?
答え1
LINENO
kshの機能で、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
しかし、通常問題が発生しますテンプレートは保持し、編集が行われるたびにスクリプトを生成する必要があります。