我正在使用一个 KSH 脚本,它可以从相当复杂的代码中创建大量变量。我可以在脚本中放置什么命令来查看这些变量创建时的值? ECHO 是正确的命令吗?echo 变量是 $variable_name?
答案1
很可能,您想要的是set -x
。这将激活跟踪模式:shell 在运行之前打印每个命令。将其作为脚本的第二行,位于该#!
行的下方。如果您想关闭脚本的一部分中的跟踪,请使用set +x
。
要显示变量的值,您可以使用echo "$somevariable"
,但这并不总是足够好。确保不要省略双引号:如果没有双引号,变量的值将被解释为文件名通配符模式列表而不是字符串。该变量有一些值不起作用echo
。在 ksh 下,我相信详尽的列表是-e
、-n
和,所有这些都被解释为 的-ne
选项。为了避免这种解释,请使用or代替(下面的两个命令是等效的):-en
echo
print
printf
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} ] 等。
如果您跳过使用大括号,它在大多数情况下仍然有效,但是您将更容易犯错误。所以我的建议是始终使用它们。