[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Command substitution / word splitting question
From: |
Binarus |
Subject: |
Command substitution / word splitting question |
Date: |
Fri, 23 Apr 2010 01:17:36 -0700 (PDT) |
User-agent: |
G2/1.0 |
Hi all,
the bash reference manual states in chapter 3.5.7: "The shell scans
the results of parameter expansion, command substitution, and
arithmetic expansion that did not occur within double quotes for word
splitting.". I thought I had understood this, but then came across a
problem.
Let's look at a very simple script:
echo 'line1' > file
echo 'line2' >> file
echo $(cat file)
When you run this script, you get the following output:
line1 line2
This is like expected: The output of "cat file" contains at least one
embedded newline; since the command substitution does not take place
within double quotes, the newline is replaced by a space when the
result of the expansion is word-splitted.
The script
echo 'line1' > file
echo 'line2' >> file
echo "$(cat file)"
gives the output
line1
line2
which is also the expected one because now the word splitting does not
occur after the command substitution because of the double
quotes;thus, the newline is conserved and the output is two lines.
So far, so good. The problem comes up if I am working with variables
that store the result of the command substitution.
The script
echo 'line1' > file
echo 'line2' >> file
RESULT=$(cat file)
echo "$RESULT"
gives the following output:
line1
line2
I don't understand why: the command substitution $(cat file) is not
within double quotes, so word splitting should be applied to the
result of the substitution and any embedded newlines should be
removed. Thus, $RESULT should contain text without newlines after line
three in the above script is executed.
But obviously, the original output of $(cat file), including embedded
newlines, has made it into $RESULT. Otherwise, the output would be
just one line and not two.
So why does this happen? I would be grateful if someone could explain
when the word splitting is exactly taking place.
Thank you very much,
Peter
- Command substitution / word splitting question,
Binarus <=