bash Variables with hex 0a on the end

I am getting data in bash and storing it in Variables.

Half the time I get the string, the other half of the time I get the string terminated with hex 0a on the end if I
pipe it to hexedit -C

is there an easy way to strip this from the variable  with a $(varname. ) or something like it ?

I am having this issue a lot

I am using the later version of redhat :)
TIMFOX123Asked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

tel2Commented:
Hi Tim,

Hex 0A is a newline (AKA line-feed) character, which is the standard UNIX/Linux line terminator.

Q1. Are you able to post your code so we can see how that's happening?

> "Half the time I get the string, the other half..."
Q2. When you say "half the time", do you mean in half of the variables, or do you get different results with different data, or what?

> "I am using the later version of redhat :)"
Q3. Later than what?
0
woolmilkporcCommented:
Which way do you "pipe" the variable to the hex editor? If you use something like

A="string"
echo $A | od -tcx1

you will always see something like this (x"0a" at the end):

0000000    s   t   r   i   n   g  \n
          73  74  72  69  6e  67  0a
0000007

That's because "echo" adds a linefeed automatically.

Instead, if you use the "-n" flag of "echo ("do not output the trailing newline")

A="string"
echo -n $A | od -tcx1

then you'll see this:

0000000    s   t   r   i   n   g
          73  74  72  69  6e  67
0000006

i. e. no trailing x"0a".

I used "od" because my hexedit doesnt support a "-C" flag.

If your variable actually contains a linefeed at the end:

A="string
"
then

echo -n "$A"

will preserve this linefeed, while

echo -n $A

will not.

As tel2 suggested above, please give us more detail!
0
TIMFOX123Author Commented:
thank you both

example, If I:

grep root /etc/passwd | hexdump -C
you will see the line ends with a hex 0a

if you want to get rid of the hex 0a  you can:
 grep root /etc/passwd | tr -d '\n' | hexdump -C

There is a part of bash that I have used but to not understand where you can modify stuff with ${}

what I would like to do is to take a varable that has a hex 0a an the end and when I use it I can "chomp" it off

echo ${varname xxxxxx }
where the xxxx is code that I do not know.

also when I was saying about "later version of Linux" I was not being clear.  I should have said "currently supported" Linux like 5,6,7.  

thank you so much
0
woolmilkporcCommented:
You see the linefeed just because "grep" adds it.
 The variable itself does not contain x'0a'.

varname=$(grep root /etc/passwd)
echo -n ${varname} | hexdump -C

Try this:

A=1234
echo ${#A}

#varname is the length of the variable varname.

The above will give 4, not 5

Or, if you want "grep"

echo 1234 > testfile
A=$(grep 1234 testfile)
echo ${#A}
4

With "${varname xxxxxx }" you probably mean variable editing (aka "parameter expansion"), using e.g. ${varname%string} (or %%), ${varname#string} (or ##) or ${varname/old/new}.

I'm not aware of a way specifying hex values with the above.
0
woolmilkporcCommented:
I could tell you how to strip the last character which might be a linefeed (or might not):

A="1234
"
echo ${#A}
-> 5
A="${A:0:$((${#A}-1))}"
echo ${#A}
-> 4
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Linux

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.