运行存储在变量中的命令以回显到文件中

Sha*_*ing 2 bash echo command variable

如何让存储的命令适用于以下场景:

CMD='echo "test" >> test.txt'
$CMD
Run Code Online (Sandbox Code Playgroud)

它将适用于其他场景,例如:

CMD='mkdir test'
$CMD
Run Code Online (Sandbox Code Playgroud)

小智 6

正确的规则必须是:

  • 将数据存储在变量中,将代码存储在函数中。

因此,让该命令工作的正确方法是:创建一个函数:

first_command (){ echo "test" >> test.txt; }
Run Code Online (Sandbox Code Playgroud)

调用函数:

first_command
Run Code Online (Sandbox Code Playgroud)

就是这样。


将命令存储为字符串是错误的。
糟糕的是使用 eval 来运行这样的命令。

它似乎适用于简单命令,但隐藏的问题是 eval 步骤删除了命令的引用。

如果您存储此命令

CMD='echo "test" >> test.txt'
Run Code Online (Sandbox Code Playgroud)

eval "$CMD"(是的,即使报价)将执行以下命令:

echo test >> test.txt
Run Code Online (Sandbox Code Playgroud)

没有引号!!!。

这是容易忘记,报价需要特殊的管理与评估许可证。无论如何,使报价正常工作总是很棘手。

在没有 eval 步骤的情况下尝试执行存储在没有重定向的变量中的命令(需要使用 eval 的主要问题)仍然很棘手,并且在所有情况下都不起作用。

请在此处阅读对问题的出色介绍:
我正在尝试将命令放入变量中,但复杂的情况总是失败!