如何从变量执行命令并在 Bash 中捕获其输出? [重复]

问题描述 投票:0回答:1

我想为命令设置一个变量,然后执行它并捕获另一个变量中的输出。我想要同时拥有命令和输出,以用于记录目的。

对于跑步

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
,这使得它容易出错并且更难以使用。

顺便说一句,我想做的比这个示例更复杂,它在多个地方使用了该命令

bash shell variables command-line
1个回答
0
投票

您可以使用

eval
,但使用
eval
可能存在风险,特别是当存储在变量中的命令包含用户输入或不受信任的数据时。所以,最好避免
eval
并使用数组分别存储命令及其参数!

类似这样的:

command=("ls" "-l")
out=$("${command[@]}")
echo "$out"

例如,如果您想向

ls
添加更多标志,只需将它们添加到
command
数组

command=("ls" "-l" "-a")
out=$("${command[@]}")
echo "$out"
© www.soinside.com 2019 - 2024. All rights reserved.