给定函数
hello () { echo "one"; echo "two"; }
在我正在使用的脚本中,cmd="$(declare -f hello); hello"
然后我尝试使用执行命令bash -c $cmd
,但是由于declare -f删除;
声明中最后一个的行为而失败,有没有办法防止这种情况?
细节
对于hello () { echo "one"; echo "two"; }
declare -f
结果
hello () {
echo "one";
echo "two"
}
代替:
hello () {
echo "one";
echo "two";
}
$cmd
它只会失败,因为您在扩展变量时没有正确引用该变量。declare -p
“尊重”分号——它会在需要重建源代码时输出分号,使其在语义上与解析的原始源代码相同。但行尾不需要分号;并且 的输出
declare -p
将每个命令放在单独的行中,因此它也可以根本没有分号,并且它在功能上将保持相同。(一旦函数被解析,它的原始来源就会丢失——内存中的表示既没有分号也没有换行符,所有这些都是通过“声明”重建的。)
您需要做的是通过在扩展周围使用双引号来保留这些换行符
"$cmd"
:如果没有引号,变量的内容将在空格处分割: