保存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中工作,因为程序可以解释命令行本身,而不是它可以帮助你!
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |