【发布时间】:2017-01-22 14:07:49
【问题描述】:
命令:
( echo 1 )
当我在命令行中输入它时工作正常,但如果我将它存储为变量并调用它,它会给出错误:
(echo: command not found
代码:
input="( echo 1 )"
$input
当我这样调用它时,为什么它不以相同的方式评估括号并将其放入子shell中?
【问题讨论】:
-
见BashFAQ #50。不带引号的扩展只经过两个解析阶段(字段拆分和全局扩展);这是有充分理由的(否则在 bash 中编写安全代码会困难得多)。链接的常见问题解答包含大量详细信息,包括对您可能希望将代码存储在变量中的情况的最佳实践的讨论。
-
你不能把这样的命令放在一个变量中。事实上,将命令放入变量中很容易失败。变量包含数据,而不是命令! 如果您想将命令存储在某处以供将来使用,请使用函数。
-
顺便说一句,你的代码和你的错误没有对齐。如果您使用此处给出的确切代码,您将收到
(: command not found。请务必完全按照要求实际复制/粘贴问题中的代码,以避免将来出现此类情况,以防这些差异实际上很重要。
标签: bash shell unix parentheses subshell