将要运行的Bash print命令

将要运行的Bash print命令,bash,variables,variable-expansion,Bash,Variables,Variable Expansion,我有一个bash脚本,通过cmd$(something goes$)设置一个变量。 在我的下一行中,我回显了echo“$cmd”,它给了我输出,但是我如何只获取我们为命令设置的参数,以便我知道实际执行的是什么 类似于printf“$cmd”,其中是“somestuff goes poof”要设置一个名为cmd的变量,该变量将执行某些操作您应该这样定义它: cmd="somestuff goes here" 使用cmd$(somestuff转到$here)shell所做的是尝试运行somethi

我有一个bash脚本,通过
cmd$(something goes$)设置一个变量。
在我的下一行中,我回显了
echo“$cmd”
,它给了我输出,但是我如何只获取我们为命令设置的参数,以便我知道实际执行的是什么


类似于printf“$cmd”,其中是“somestuff goes poof”

要设置一个名为
cmd
的变量,该变量将执行
某些操作
您应该这样定义它:

cmd="somestuff goes here"
使用
cmd$(somestuff转到$here)
shell所做的是尝试运行
something
(仍然没有定义,您称之为
cmd
),然后是
$(要运行的其他东西)

因此,如果您还想打印脚本将要运行的内容,只需按照以下顺序操作:

# define your variable
cmd="something goes here"

# print what is going to run
printf "$cmd"

# then run it
$cmd 

您可能对使用
set-x
跟踪命令感兴趣。您可以在脚本中放入
set-x
,也可以使用
bash-x./script.sh
运行脚本。在此处阅读有关shell选项的更多信息:
cmd=“Something goes$here”
<代码>echo$cmd;要执行
$cmd
,我不推荐这种方法。如果命令中有任何非平凡的shell语法(引号、转义符、管道/重定向等),则将命令存储在变量中将失败(请参见[BashFAQ#50:“我试图将命令放入变量中,但复杂的情况总是失败!”)[,这通常不是一个好主意。变量应该用来存储数据,而不是可执行代码。另外,对一个不带引号的变量使用
echo
也有它自己的一套可能的问题。@GordonDavisson你的更好的解决方案是什么?@Tony这确实取决于具体的情况和目标。
set-x
是解决问题的标准方法让shell本身打印与其执行的命令相同的命令。BashFAQ 50(很抱歉链接有问题)有一些建议。要给出更具体的建议,我需要查看实际涉及的代码。