我正在编写一个脚本,其中一部分没有按我的预期工作。
为了简单起见,我在一个简单的例子中分解了这一部分:
echo 'echo "" > tmp' | while read cmd; do $cmd ; done
在这里,我希望 $cmd 执行完整的命令“echo ""> tmp”。
但这种情况发生了:
"" > tmp
执行的命令按字面意思回显“”> tmp。而不是回显“”并将其重定向到文件 tmp.显然,将命令存储在 $cmd 中然后尝试执行它时出现了问题。
即使我进一步简化,结果也是一样的:
cmd="echo "" > tmp"
$cmd
> tmp
我尝试过尝试不同的用法''
and ""
,但还没有解决。
Use eval
执行存储在变量中的命令:
echo 'echo "" > tmp' | while read cmd; do eval "$cmd" ; done
的价值cmd
将echo "" > tmp
。那么当 Bash 将参数替换解析为命令时,该部分"" > tmp
将是字符串参数echo
, 不被识别为>
(重定向)。所以它只会输出参数部分。
等同于:$(echo 'echo "" > tmp')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)