保存bash函数参数中的引号

前端之家收集整理的这篇文章主要介绍了保存bash函数参数中的引号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想做的是作为一个函数的输入,可以包括引号(单或双)的行,并将该行完全提供给函数.例如:
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中工作,因为程序可以解释命令行本身,而不是它可以帮助你!
原文链接:https://www.f2er.com/bash/384007.html

猜你在找的Bash相关文章