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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |