To assign the output of a command to an array, you need to use a command substitution inside of an array assignment. For a general command command
this looks like:
arr=( $(command) )
In the example of the OP, this would read:
arr=($(grep -n "search term" file.txt | sed 's/:.*//'))
The inner $()
runs the command while the outer ()
causes the output to be an array. The problem with this is that it will not work when the output of the command contains spaces. To handle this, you can set IFS
to
.
IFS=$'
' arr=($(grep -n "search term" file.txt | sed 's/:.*//'))
You can also cut out the need for sed by performing an expansion on each element of the array:
arr=($(grep -n "search term" file.txt))
arr=("${arr[@]%%:*}")
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…