#!/usr/local/bin/bash
out=`grep apache README`
echo $out;
Usually grep shows each match on a separate line when run on the command line. However, in the above scripts, the newline separating each match disappears. Does anyone know how the newline can be preserved?
-
Put $out in quotes:
#!/usr/local/bin/bash out=`grep apache README` echo "$out";
-
You're not losing it in the assignment but in the echo. You can see this clearly if you:
echo "${out}"
You'll see a similar effect with the following script:
x="Hello, I am a string with newlines" echo "=====" echo ${x} echo "=====" echo "${x}" echo "====="
which outputs:
===== Hello, I am a string with newlines ===== Hello, I am a string with newlines =====
And, irrelevant to your question but I'd like to mention it anyway, I prefer to use the $() construct rather than backticks, just for the added benefit of being able to nest commands. So your script line becomes:
out=$(grep apache README)
Now that may not look any different (and it isn't) but it makes possible more complex commands like:
lines_with_nine=$(grep $(expr 7 + 2) inputfile)
Tanj : I didn't know you could do that with $()... learn something new all the time here.Barry Brown : You can do math without using expr. Just use double-parens: $((7 + 2))paxdiablo : Actually I might try that with all my answers from now on - append a (not always totally) relevant snippet for the education of the swarm :-)paxdiablo : Good point, Barry, but it was just an example of nesting - my example-generating skills appear to have deteriorated with age (and/or alcohol :-).Barry Brown : I just found out about the $(()) thing, myself. -
Quoting variables in bash preserves the whitespace.
For instance:
#!/bin/bash var1="A B C D" echo $var1 # A B C D echo "$var1" # A B C D
since newlines are whitespace they get "removed"
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.