加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 无法从函数中评估脚本参数

发布时间:2020-12-16 01:57:59 所属栏目:安全 来源:网络整理
导读:我已经开始再次编写 shell脚本,我发现自己处于一种情况,我经常需要编写调试回显以跟踪脚本正在做什么.我以前这样做的简单方法是写下这样的东西: #!/bin/bashmyVar = 'Erractic Nonesense'echo "myVar: $myVar" == myVar:Erractic Minsense 这很好用,而且非
我已经开始再次编写 shell脚本,我发现自己处于一种情况,我经常需要编写调试回显以跟踪脚本正在做什么.我以前这样做的简单方法是写下这样的东西:

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

==> myVar:Erractic Minsense

这很好用,而且非常简单,但是我必须为每个我希望追踪的变量写这个很累,而且作为一个认为用更少的代码来做更多东西的人很棒,我自己写了一个函数:

#!/bin/bash
dbg() # $msg
{
    echo "$@: ${!@}" 
}

myVar = 'Erractic Nonesense'
dbg myVar

==> myVar:Erractic Minsense

这适用于常规变量,但是对于脚本参数($1,$2等),它们不起作用.为什么?

==> $./myScript 123

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

==> 1:1

而且,这怎么能被规避呢?

编辑

感谢Barmar我现在明白为什么它会这样,但第二个问题仍然存在.

编辑2

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

编辑3

我认为EDIT 2和set -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}))}" 
}

解决方法

您必须调用该函数并显式地将脚本args传递给它.你可以这样做:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读