我想做的是作为一个函数的输入,可以包括引号(单或双)的行,并将该行完全提供给函数.例如:
原文链接:https://www.f2er.com/bash/384007.htmlfunction 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,但也有其限制:“变为”,退出状态对于失败的命令不可见.