Bourne variable unset outside while()

Rick Miller vmiller at
Thu May 8 18:48:23 UTC 2014

Hi all,

I have a Bourne shell script that echoes the contents of a data structure
to a while() loop that iterates over the data and is expected to append a
string from the current iteration to a different list.  Inside the while(),
it works fine, but echo'ing the list outside the loop produces empty
output.  I expect the variable to maintain it's final state after
processing the while(), but it does not appear to be doing so.

/** The script **/

#! /bin/sh -x

fs="freebsd-ufs gprootfs 1G
freebsd-swap gpswapfs 1G
freebsd-ufs gpvarfs 1G";

echo "${fs}" |
while read -r fstype fslabel fssize; do

        labels="${labels} ${fslabel}";
        echo "${labels}";


echo -e "\nlabels = ${labels}";

/** End the script **/

The output from this script is at

This almost appears to be an issue with scope, but I've not encountered
this before, especially in such simple context.  I must be missing
something obvious and just looking for feedback to send me off in the right

Take care
Rick Miller

More information about the freebsd-questions mailing list