Taking It One Character at a Time
Problem
You have some parsing to do and for whatever reason nothing else will do—you need to take your strings apart one character at a time.
Solution
The substring function for variables will let you take things apart and another feature tells you how long a string is:
#!/usr/bin/env bash
# cookbook filename: onebyone
#
# parsing input one character at a time
while read ALINE
do
for ((i=0; i < ${#ALINE}; i++))
do
ACHAR=${ALINE:i:1}
# do something here, e.g. echo $ACHAR
echo $ACHAR
done
doneDiscussion
The read will take input from
standard in and put it, a line at a time, into the variable $ALINE. Since there are no other variables on
the read command, it takes the entire
line and doesn’t divvy it up.
The for loop will loop once for
each character in the $ALINE
variable. We can compute how many times to loop by using ${#ALINE}, which returns the length of the
contents of $ALINE.
Each time through the loop we assign ACHAR the value of the one-character substring
of ALINE that begins at the ith
position. That’s simple enough. Now, what was it you needed to parse
this way?
See Also
Check out the other parsing techniques in this chapter to see if you can avoid working at this low level
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access