无法从函数计算脚本参数



我又开始编写shell脚本了,我发现自己经常不得不编写调试回显来跟踪脚本正在做什么。我用来做正确的简单方法是写这样的东西:

#!/bin/bash
myVar = 'Erractic Nonesense'
echo "myVar: $myVar" 

==> myVar: Erractic Nonesense

这工作得很好,而且相当简单,但是,必须为我希望跟踪的每个变量编写这个很累,作为一个认为用更少的代码做更多事情的人很棒,我给自己写了一个函数:

#!/bin/bash
dbg() # $msg
{
    echo "$@: ${!@}" 
}
myVar = 'Erractic Nonesense'
dbg myVar

==> myVar: Erractic Nonesense

这适用于常规变量,但对于脚本参数($ 1、$2 等(不起作用。为什么?

==> $ ./myScript 123

#!/bin/bash
...
dbg 1 # This is the bugger in question.

==> 1: 1

而且,如何规避这一点?

编辑

多亏了巴马尔,我现在明白为什么它会这样,但是,第二个问题仍然存在。

编辑 2

使用koodawg的想法,这就是结果。它有效。已更新,请参阅编辑 4

编辑 3

我认为混合使用 EDIT 2set +-x 将是一个可行的解决方案。

编辑 4

更新了逻辑以落在参数上,因为前一个并不总是有效。添加了花哨的标签。

RX_INTEGER='^[0-9]+$'
DBG_SCRIPT_ARGS=( "$0" "$@" )
DBG_PADDING="        " # tabs of 8 spaces
dbg() # $msg | OUT$args OUT$res
{    
    args=$@
    [[ $args =~ $RX_INTEGER ]] && res="${DBG_SCRIPT_ARGS[args]}" || res="${!@}"
    printf "%s%s`%s`n" "$args:" "${DBG_PADDING:$(((${#args}-1)%${#DBG_PADDING}))}" 
}

您必须调用该函数并将脚本参数显式传递给它。 您可以执行以下操作:

for argz in `echo $*`
do
    dbg ${argz}
done

相关内容

  • 没有找到相关文章

最新更新