如何删除从shell脚本变量回车和新行(How to remove carriage return

2019-07-22 02:44发布

我是新来的shell脚本。 我采购一个文件,该文件在Windows中创建并具有回车,使用source命令。 之后我源,当我追加一些字符给它,它总是涉及到行的开始。

test.dat (其具有在端回车):

testVar=value123

testScript.sh (上面的文件源):

source test.dat
echo $testVar got it

我得到的输出是

got it23

我怎样才能去掉'\r'从变量?

Answer 1:

另一个解决方案采用tr

echo $testVar | tr -d '\r'
cat myscript | tr -d '\r'

选项-d表示delete



Answer 2:

你可以用sed如下:

MY_NEW_VAR=$(echo $testVar | sed -e 's/\r//g')
echo ${MY_NEW_VAR} got it

顺便说一句,尝试做一个dos2unix您的数据文件。



Answer 3:

在你的脚本文件中使用此命令将其复制到Linux / Unix的后

perl -pi -e 's/\r//' scriptfilename


Answer 4:

sed -e 's/[\r\n]//g'以除去两个回车返回( \r )和换行( \n )从每个文本行。



Answer 5:

对于不调用外部程序的纯壳溶液:

NL=$'\n'    # define a variable to reference 'newline'

testVar=${testVar%$NL}    # removes trailing 'NL' from string


Answer 6:

因为文件你源结束与回车线,内容$testVar很可能是这样的:

$ printf '%q\n' "$testVar"
$'value123\r'

(第一行的$是Shell提示符;第二行的$距离%q格式化字符串,表示$''引述 。)

为了摆脱回车,你可以使用shell参数扩展和ANSI-C引用 (需要的Bash):

testVar=${testVar//$'\r'}

这将导致

$ printf '%q\n' "$testVar"
value123


文章来源: How to remove carriage return and newline from a variable in shell script
标签: shell unix