查看 KSH 脚本中的变量值

查看 KSH 脚本中的变量值

我正在使用一个 KSH 脚本,它可以从相当复杂的代码中创建大量变量。我可以在脚本中放置什么命令来查看这些变量创建时的值? ECHO 是正确的命令吗?echo 变量是 $variable_name

答案1

很可能,您想要的是set -x。这将激活跟踪模式:shell 在运行之前打印每个命令。将其作为脚本的第二行,位于该#!行的下方。如果您想关闭脚本的一部分中的跟踪,请使用set +x

要显示变量的值,您可以使用echo "$somevariable",但这并不总是足够好。确保不要省略双引号:如果没有双引号,变量的值将被解释为文件名通配符模式列表而不是字符串。该变量有一些值不起作用echo。在 ksh 下,我相信详尽的列表是-e-n和,所有这些都被解释为 的-ne选项。为了避免这种解释,请使用or代替(下面的两个命令是等效的):-enechoprintprintf

print -r -- "$somevariable"
printf '%s\n' "$somevariable"

如果变量的值包含尾随空格或非打印字符,则不会在屏幕上显示。使用%q转义 toprintf来打印变量值的明确表示。

printf '$%s is %q\n' somevariable "$somevariable"

您可以将其放入函数中。

trace_variables () {
  typeset _trace_variables__var
  for _trace_variables__var; do
    typeset -n _trace_variables__ref="$_trace_variables__var"
    printf "%s = %q\\n" "$_trace_variables__var" "$_trace_variables__ref"
  done
}
trace_variables somevariable anothervariable

答案2

在 ksh 中,变量替换的正确使用是 ${variable_name}。是的,您可以将其回显到终端或在测试命令中使用它,即 if [ ${variable_name} - eq ${mynumber} ] 等。

如果您跳过使用大括号,它在大多数情况下仍然有效,但是您将更容易犯错误。所以我的建议是始终使用它们。

相关内容