Hi,
I've been trying to learn scripting from the tutorial online. I believe I
found an error in the script. In part 3, flow control we edit a function
home_space and have the following line
printf "$format" $total_dirs $total_files $total_blocks
http://linuxcommand.org/wss0140.php
$format is defined to take 4 arguments, and since total_blocks=$(du -s
$home_dir) which gives the number of blocks followed by the name of the
directory, it seems that we assume that $total_blocks will resolve into two
arguments which together with $total_dirs and $total_files gives a sum total
of 4 arguments.
However, I found that $total_blocks was being treated as one argument even
though it has two tokens. Without looking at the shell code, I believe that
the assignment of arguments in printf is somehow happening BEFORE the shell
is interpreting the variables. My work around was to do this:
total_blocks=$(du -s $home_dir | sed -e "s/[ \t].*//")
printf "$format" $total_dirs $total_files $total_blocks $home_dir
Can someone confirm and clarify this behavior? The tutorial seems to suggest
that the variables are interpreted by the shell before anything else, which
is counter to the behavior that I'm seeing.
Thank you,
Bryan
|