我想为命令设置一个变量,然后执行它并捕获另一个变量中的输出。我想要同时拥有命令和输出,以用于记录目的。
对于跑步
ls
,我认为以下应该有效:
command="ls"; out=$(command); echo $out
但是,当我运行它时,输出为空,这意味着
ls
从未被执行。那么,我如何执行它并捕获输出?
原因是我想更容易地在一个地方更改命令,而不是在任何使用它的地方,例如,如果需要更改为
ls -l
。
按照
command="ls"; out=$(ls); echo $out
进行操作是可行的,但如果我想添加标志,则需要在 2 个地方进行更改:command="ls -l"; out=$(ls -l); echo $out
,这使得它容易出错并且更难以使用。
顺便说一句,我想做的比这个示例更复杂,它在多个地方使用了该命令
您可以使用
eval
,但使用 eval
可能存在风险,特别是当存储在变量中的命令包含用户输入或不受信任的数据时。所以,最好避免 eval
并使用数组分别存储命令及其参数!
类似这样的:
command=("ls" "-l")
out=$("${command[@]}")
echo "$out"
例如,如果您想向
ls
添加更多标志,只需将它们添加到 command
数组
command=("ls" "-l" "-a")
out=$("${command[@]}")
echo "$out"