如何在ash中找到变量的值?

如何在ash中找到变量的值?

我有一个巨大的脚本,我正在尝试调试,它具有以下结构:

var "-p Some Parameter"  || return 1
var "-p Other Parameter" || return 0

我想知道它实际执行的内容(并且我知道它会执行某些内容,因为我从任何 var 中收到错误消息),但是当我执行echo $varecho ${var}等等时,它会给我空字符串。echo "${!var}"不起作用(“语法错误:错误的替换”),如果我这样做

eval e="\$$var"
echo $e

它只打印“$”

有没有什么方法可以找出 ash 中的变量实际上等于什么,或者是否有某种跟踪可以让我看到脚本执行的实际命令(在 Alpine 上可用)?

答案1

var "-p Some Parameter"  || return 1

ash应该是一个类似 POSIX 的 shell,所以这只是运行一个名为 的命令var,并以字符串-p Some Parameter作为参数(然后可能return根据退出状态进行调用)。发生什么完全取决于var发生了什么。

当我这样做时echo $varecho ${var}它会给我空字符串。

那么变量$var可能未设置或为空(或仅包含空格)。echo "${var+var is set}"如果这很重要,您可以尝试查看它是否已设置。

但是一个名为 的变量var与名为 的命令或函数无关var

echo "${!var}"

这是间接变量扩展的 Bashism,它将扩展为变量的值命名于变量var.它不是标准的,因此很可能会导致错误。

eval e="\$$var"
echo $e

我不确定这应该做什么:它似乎只是将变量的值分配var给变量e,然后打印它,但如果变量包含空格,则赋值会中断。

相关内容