如何在Bash脚本中将eval的结果赋值给变量?

5

我有一个返回列表的bash脚本,这正是我想要的,但我需要将结果放入一个变量中,以便我可以在for循环中逐个操作它们。

#!/bin/bash
processID="ps aux | grep `date +"%b"` | gawk '{print \$2}'"

eval $processID

我如何将eval的结果赋值给一个变量? 谢谢


1
你想做什么?你不需要一个变量来循环命令输出,eval 几乎总是一个坏主意。你可能还想了解一下进程管理 - l0b0
我正在尝试对另一个命令生成的列表进行操作。虽然我不需要为命令输出设置变量,但我认为这样做可以使未来的事情更加易读。尽管如此,我成功地实现了我的目标,而没有使用eval,但阅读您的参考资料让我确信这样做并没有错。感谢您的输入。 - jimd
另一个相关信息的片段(http://mywiki.wooledge.org/BashFAQ/050)。 - Dennis Williamson
2个回答

2
pid=$( ps aux | grep `date +"%b"` | awk '{print $2}' )

无论是在命令行还是脚本中,我都会收到关于反斜杠在 $2 不是行末字符的错误。当我将其删除后,它可以正常运行。谢谢。 - jimd

0

由于您已经在使用awk,因此可以省略grep的需求。"$"不需要转义,因为单引号内不会发生扩展。

pid=$(ps aux | awk -vdate=$(date +%b) '$0 ~ date { print $2 }')

如果您希望返回多个pid,请使用数组:
pids=($(ps aux | awk -vdate=$(date +%b) '$0 ~ date { print $2 }'))

for pid in "${pids[@]}"; do
   ...
done

3
谢谢你,jordanm。你给了我一种获取结果的方法,但你没有回答我提出的问题:“如何将 eval 的结果赋值给一个变量?”。那段代码只是一个例子。 - jimd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接