Parsing Output into an Array
Problem
You want the output of some program or script to be put into an array.
Solution
#!/usr/bin/env bash # cookbook filename: parseViaArray # # find the file size # use an array to parse the ls -l output into words LSL=$(ls -ld $1) declare -a MYRA MYRA=($LSL) echo the file $1 is ${MYRA[4]} bytes.
Discussion
In our example, we take the output from the ls -l
command and parse the words by putting
them into an array. Then we can just refer to each array element to get
at each word. The typical output from the ls
-l
command looks like this (yours may vary due to
locale):
-rw-r--r--1 albing users 113 2006-10-10 23:33 mystuff.txt
Arrays are easy to initialize if you know the values as you write the script. The format is simple. We begin by declaring the variable to be an array, and then we assign it values:
declare -a MYRA MYRA=(first second third home)
The same can be done by using a variable inside those parentheses.
Just be sure not to use quotes around the variable.
Writing MYRA=$("$LSL")
will put the
entire string into the first argument, since it is all contained as one
quoted string. Then ${MYRA[0]}
will
be the only array element, and it will contain the entire string, which
is not what you wanted.
We also could have shortened this script by combining the steps, and it would look like this:
declare -a MYRA MYRA=($(ls -ld $1))
If you want to know how many elements you have in your new array,
just reference the variable ${#MYRA[*]}
or ${#MYRA[@]}
, either of which ...
Get bash Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.