I was asked a question recently and I have not been able to deduce the
answer and so am appealing to the group for further education.  I
could not find a match for my question in the FAQ.
  $ printf "\n" | od -tx1
  0000000 0a
  $ printf "\n" | wc -c
  1

But when this is used with a command substitution the newline
disappears.

  $ printf "$(printf "\n")" | wc -c
  0

Thinking that the IFS was reason for this I tried the following, where
the ' ' is a single space character.

  $ export IFS=' '
  $ printf "\n" | wc -c
  1
  $ printf "$(printf "\n")" | wc -c
  0

Hmm...  Shouldn't this last case have printed a single newline?  The
IFS no longer contains a newline.  Why wouldn't a literal 0x0a be
embedded into the "$(...)" command substitution string and then be
printed by printf?  The following shows that a literal newline would
be printed in that case.

  $ printf "
  " | wc -c
  1
  $ printf "
  > " | od -tx1
  0000000 0a

I can tell that I am missing something basic in the understanding of
the behavior.

Thanks
Bob


_______________________________________________
Bug-bash mailing list
Bug-bash@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-bash

Reply via email to