|
|
October
13, 2003 -
Useful
Shell Scripting Variables - Part III - IFS
(Internal Field Separator)
|
|
Another
shell variable that you should become
comfortable using is the IFS, or internal
field separator, variable.
The shell uses the value stored in
IFS, which is the space, tab, and newline
characters by default, to delimit words
for the read and set commands, when
parsing output from command substitution,
and when performing variable substitution.
IFS can be redefined to parse one or more
lines of data whose fields are not
delimited by the default white-space
characters.
Consider this sequence of variable
assignments and for loops:
|
|
$ line=learn:unix:at:livefire:labs
$ for i in $line
> do
> echo $i
> done
learn:unix:at:livefire:labs
$ OIFS=$IFS
$ IFS=:
$ for i in $line
> do
> echo $i
> done
learn
unix
at
livefire
labs
$
|
|
The
first command assigns the string
“learn:unix:at:livefire:labs” to the
variable named line.
You can see from the first for loop
that the shell treats the entire string as
a single field. This is because the string does not contain a space, tab, or
newline character.
After
redefining IFS, the second for loop treats
the string as four separated fields, each
delimited by a colon.
Using a colon for IFS would be
appropriate when parsing the fields in a
record from /etc/passwd, the user account
information file:
|
|
livefire:x:100:1::/export/home/livefire:/bin/ksh
|
|
Notice
that the original value of IFS was stored
in OIFS (“O” for original) prior to
changing its value.
After you are finished using the
new definition, it would be wise to return
it to its original value to avoid
unexpected side effects that may surface
later on in your script.
TIP
– The current value of IFS may be viewed
using the following pipeline:
|
$ echo "$IFS" | od -b
0000000 040 011 012 012
0000004
$
|
The
output of the echo command is piped into the
octal dump command, giving you its octal
equivalent.
You can then use an ASCII table to
determine what characters are stored in the
variable.
Hint: Ignore the first set of zeros
and the second newline character (012),
which was generated by echo.
|
|
|
|
|
|
|
Learn
more...
If you are new to the UNIX or Linux
operating system and would like to learn
more, you may want to consider
registering for LiveFire Labs' UNIX
and Linux Operating System Fundamentals
online training course.
If you already have a solid grasp of the
fundamentals but would like to learn more
about the Korn shell and basic and
advanced shell scripting, taking our Korn
Shell Scripting course will be
beneficial to you.
Our
innovative hands-on training model allows
you to learn
UNIX by completing hands-on
exercises on real servers in our Internet
Lab.
More
Tips...
· Popular
UNIX Tips from the Past
|
|
|
|
 |
 |
| |
Receive
the UNIX Tip, Trick, or Shell Script of the
Week by Email
|
|
|
|