如何将命令的输出分配给数组?

我需要从grep分配结果到数组…例如

 grep -n "search term" file.txt | sed 's/:.*//' 

这导致了一堆行号,其中findsearch项。

 1 3 12 19 

将它们分配给bash数组最简单的方法是什么? 如果我简单地将它们分配给一个variables,它们将变成空格分隔的string。

要将输出分配给数组,您需要在数组赋值中使用命令replace。

 arr=($(grep -n "search term" file.txt | sed 's/:.*//')) 

内部$()运行命令,而外部()导致输出是一个数组。 这个问题是,它不会使用包含空格的文件。 要处理这个问题,您可以将IFS设置为\ n。

 IFS=$'\n' arr=($(grep -n "search term" file.txt | sed 's/:.*//')) unset IFS 

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

 arr=($(grep -n "search term" file.txt)) arr=("${arr[@]%%:*}") 

空格分隔的string很容易在bash中穿过。

 # 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 $out | awk '{for(i=1;i<=NF;i++) print $i;}' # convert to an array ar=($out) echo ${ar[3]} # echos 4th element 

如果你想在文件名称空间使用find . -printf "\"%p\"\n" find . -printf "\"%p\"\n"