发布
社区首页 >问答首页 >如何将命令的输出赋值到数组中?

如何将命令的输出赋值到数组中?
EN

Stack Overflow用户
提问于 2012-02-26 08:25:34
回答 2查看 102.1K关注 0票数 95

我需要将grep的结果赋值给一个数组...例如

代码语言:javascript
代码运行次数:0
复制
grep -n "search term" file.txt | sed 's/:.*//'

这导致了一串带有行号的行,在这些行中找到了搜索词。

代码语言:javascript
代码运行次数:0
复制
1
3
12
19

将它们分配给bash数组的最简单方法是什么?如果我简单地将它们赋给一个变量,它们就会变成一个空格分隔的字符串。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-26 09:07:26

要将命令的输出赋值给数组,需要在数组赋值中使用命令替换。对于通用命令command,如下所示:

代码语言:javascript
代码运行次数:0
复制
arr=( $(command) )

在该操作的示例中,这将是:

代码语言:javascript
代码运行次数:0
复制
arr=($(grep -n "search term" file.txt | sed 's/:.*//'))

内部$()运行命令,而外部()使输出为数组。这样做的问题是,当命令的输出包含空格时,它将无法工作。要处理此问题,可以将IFS设置为\n

代码语言:javascript
代码运行次数:0
复制
IFS=$'\n' arr=($(grep -n "search term" file.txt | sed 's/:.*//'))

您还可以通过对数组的每个元素执行扩展来减少对sed的需求:

代码语言:javascript
代码运行次数:0
复制
arr=($(grep -n "search term" file.txt))
arr=("${arr[@]%%:*}")
票数 156
EN

Stack Overflow用户

发布于 2012-02-26 08:45:36

在bash.中很容易遍历空格分隔的字符串

代码语言:javascript
代码运行次数:0
复制
# save the ouput
output=$(grep -n "search term" file.txt | sed 's/:.*//')

# iterating by for.
for x in $output; do echo $x; done;

# awk
echo $output | awk '{for(i=1;i<=NF;i++) print $i;}'

# convert to an array
ar=($output)
echo ${ar[3]} # echos 4th element

如果您考虑在文件名中使用空格,请使用find . -printf "\"%p\"\n"

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9449417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档