我希望能够在 shell 脚本中打印当前行号。我知道$LINENO
Bash shell 中的变量,但 Bourne shell 中似乎不存在该变量。还有其他变量或方法可以获得行号吗?
答案1
LINENO
是 ksh 的一项功能,也存在于 bash 和 zsh 中。 Bourne shell、POSIX 规范或 dash 中没有这样的功能。如果您需要行号,请确保您的脚本在具有该功能的 shell 下执行。大多数系统都提供 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
但通常会引起问题每次要进行编辑时都必须维护模板并生成脚本。