这是一个错字,还是你错过了价值前面的'$',即(你的第二行)
let "var=$value"
我认为应该是
let var="$value"
通过打开shell调试功能,您可以在构建脚本时消除很多问题,即
set -vx
let "var= value"
set +vx
或者放在set -vx
脚本顶部附近,看看如何处理所有脚本。
EDIT3或放在第一行-vx
之后,即.#!/bin/bash
#!/bin/bash -vx
EDIT2我错过了你的第一条评论,是的,line1 看起来也有问题。尝试这个
let value="$(awk 'NR==14' ${TEMP_DIR}/IR4723/count_part_UNVM.txt)"
请注意,在 1995 年的“新 Kornshell 语言”中,将反引号用于 cmd-substitution 已被声明为已弃用。$( )
因为 cmd-substition 很容易嵌套,是您最好的选择。另外,请注意 awk 脚本(在 cmdline 上)应作为单个参数呈现,并用单引号或 dbl 引号括起来。(但我不确定您是否需要引号,因为您的“程序”中没有空格。)如果修订不起作用,print --"value=XX${value}XX
请在分配后添加并编辑上面的问题以显示输出。
编辑根据您的评论/问题,周围有一些 shell 脚本调试器,但我从不使用它们。如果您真的想尝试,请搜索 Rosenberg ksh book debugger。
set -vx
应该真正称为“执行跟踪” 。它在执行之前向您显示代码行或代码块,然后将任何变量扩展为它们的值。这是人们调试 ksh 脚本的典型方式。您还可以添加诸如print -- "var=XX${var}XX"
查看变量的单个值之类的语句,但这会弄乱您的输出,并且可能需要您关闭这些语句,从而迫使您再次编辑脚本。
我希望这有帮助。