我想要做的是,作为函数的输入,可以包括引号(单引号或双引号)和与该函数提供的行完全相同的回声.例如:
function doit {
printf "%s " ${@}
eval "${@}"
printf " # [%3d]\n" ${?}
}
Run Code Online (Sandbox Code Playgroud)
其中,给出以下输入
doit VAR=42
doit echo 'single quote $VAR'
doit echo "double quote $VAR"
Run Code Online (Sandbox Code Playgroud)
产量如下:
VAR=42 # [ 0]
echo single quote $VAR # [ 0]
echo double quote 42 # [ 0]
Run Code Online (Sandbox Code Playgroud)
所以变量扩展的语义就像我期望的那样得到保留,但是我无法得到提供给函数的行的确切格式.我想要的是doit echo 'single quote $VAR'结果echo 'single quote $VAR'.
我确信这与bash在传递给函数之前处理参数有关; 我只是想找个方法(如果可能的话).
所以我的目的是影响脚本的执行,同时提供执行的精确副本,可以用作诊断工具,包括每个步骤的退出状态.
虽然我可以通过做类似的事情来获得上述所需的行为
while read line ; do
doit ${line}
done < ${INPUT}
Run Code Online (Sandbox Code Playgroud)
面对控制结构(即等) …