Line by line in BASH, coping with the spaces

When I do something like this:

for line in `cat some_file`
do
    <whatever with> $line
done

It works fine when there are no spaces in the lines in $line. But if there are spaces, it does <whatever> to each expression between the spaces.

Two neat tricks for coping with is.

1. Change the internal field separator ($IFS) to only separate on newline:

IFS=$'\n'

And carry on with your normal loop.

2. Use a read in a while loop instead:

cat filename | while read line; do
    echo $line
done

Reference: http://ubuntuforums.org/showthread.php?t=623808

Advertisements

About Miller

I live in Second Life with my shoulder pet Logan. I write code for her and I sometimes greet people in the Virtual Kennel Club Dog Park at Turing Isle: http://slurl.com/secondlife/Turing Isle/128/126/27/ I also write in my own Blog at http://miller.logspark.com and sometimes even on FB.
This entry was posted in Linux Stuff and tagged , , , . Bookmark the permalink.

3 Responses to Line by line in BASH, coping with the spaces

  1. Rodnee says:

    Thanks. I was trying to figure out if changing the IFS would be system wide or not. But the read in while loop worked for me. Thanks again.

    • Miller says:

      Hey Rodnee, IFS will return to its original value once the script finishes. Or, if you just set it inside a block of code, it will revert when that block of code finishes. But looking at your page, I think you already got that covered (-:

  2. Pingback: bash – working with spaces « pseudo-scripter

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s