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

保存bash函数参数中的引号

发布时间:2020-12-16 01:24:28 所属栏目:安全 来源:网络整理
导读:我想做的是作为一个函数的输入,可以包括引号(单或双)的行,并将该行完全提供给函数.例如: function doit { printf "%s " ${@} eval "${@}" printf " # [%3d]n" ${?}} 其中,给出以下输入 doit VAR=42doit echo 'single quote $VAR'doit echo "double quote $
我想做的是作为一个函数的输入,可以包括引号(单或双)的行,并将该行完全提供给函数.例如:
function doit {
   printf "%s " ${@} 
   eval "${@}"
   printf " # [%3d]n" ${?}
}

其中,给出以下输入

doit VAR=42
doit echo 'single quote $VAR'
doit echo "double quote $VAR"

产生以下内容:

VAR=42  # [  0]
echo single quote $VAR  # [  0]
echo double quote 42  # [  0]

所以变量扩展的语义会像我所料想的那样保留下去,但是我不能得到这个行的确切格式.我想要的是doit echo’single quote $VAR’导致echo’单引号$VAR’.

我确信这与传递给函数的bash处理参数有关;我只是在寻找一个方法(如果可能的话).

编辑

所以我打算的是影响脚本的执行,同时提供可以用作诊断工具的执行的准确副本,包括每个步骤的退出状态.

虽然我可以通过做类似的事情得到上述所需的行为

while read line ; do 
   doit ${line}
done < ${INPUT}

面对控制结构(即,如果,等等),该方法失败.我考虑使用set -x,但也有其限制:“变为”,退出状态对于失败的命令不可见.

发生这种情况的原因是因为bash解释了你的想法.当调用该函数时,引号根本就不再存在,所以这是不可能的.它在DOS中工作,因为程序可以解释命令行本身,而不是它可以帮助你!

(编辑:李大同)

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

    推荐文章
      热点阅读