How to remove carriage return from a variable in shell script
I am new to shell script. I am sourcing a file, which is created in Windows and has carriage returns, using the source
command. After I source when I append some characters to it, it always comes to the start of the line.
test.dat
(which has carriage return at end):
testVar=value123
testScript.sh
(sources above file):
source test.dat
echo $testVar got it
The output I get is
got it23
How can I remove the '\r'
from the variable?
Solution 1:
yet another solution uses tr
:
echo $testVar | tr -d '\r'
cat myscript | tr -d '\r'
the option -d
stands for delete
.
Solution 2:
You can use sed as follows:
MY_NEW_VAR=$(echo $testVar | sed -e 's/\r//g')
echo ${MY_NEW_VAR} got it
By the way, try to do a dos2unix
on your data file.
Solution 3:
Because the file you source ends lines with carriage returns, the contents of $testVar
are likely to look like this:
$ printf '%q\n' "$testVar"
$'value123\r'
(The first line's $
is the shell prompt; the second line's $
is from the %q
formatting string, indicating $''
quoting.)
To get rid of the carriage return, you can use shell parameter expansion and ANSI-C quoting (requires Bash):
testVar=${testVar//$'\r'}
Which should result in
$ printf '%q\n' "$testVar"
value123