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 的主要问题)仍然很棘手,并且在所有情况下都不起作用。
请在此处阅读对问题的出色介绍:
我正在尝试将命令放入变量中,但复杂的情况总是失败!