我有一个巨大的脚本,我正在尝试调试,它具有以下结构:
var "-p Some Parameter" || return 1
var "-p Other Parameter" || return 0
我想知道它实际执行的内容(并且我知道它会执行某些内容,因为我从任何 var 中收到错误消息),但是当我执行echo $var
或echo ${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 $var
,echo ${var}
它会给我空字符串。
那么变量$var
可能未设置或为空(或仅包含空格)。echo "${var+var is set}"
如果这很重要,您可以尝试查看它是否已设置。
但是一个名为 的变量var
与名为 的命令或函数无关var
。
echo "${!var}"
这是间接变量扩展的 Bashism,它将扩展为变量的值命名于变量var
.它不是标准的,因此很可能会导致错误。
eval e="\$$var"
echo $e
我不确定这应该做什么:它似乎只是将变量的值分配var
给变量e
,然后打印它,但如果变量包含空格,则赋值会中断。