我是新来的shell脚本。 我采购一个文件,该文件在Windows中创建并具有回车,使用source
命令。 之后我源,当我追加一些字符给它,它总是涉及到行的开始。
test.dat
(其具有在端回车):
testVar=value123
testScript.sh
(上面的文件源):
source test.dat
echo $testVar got it
我得到的输出是
got it23
我怎样才能去掉'\r'
从变量?
我是新来的shell脚本。 我采购一个文件,该文件在Windows中创建并具有回车,使用source
命令。 之后我源,当我追加一些字符给它,它总是涉及到行的开始。
test.dat
(其具有在端回车):
testVar=value123
testScript.sh
(上面的文件源):
source test.dat
echo $testVar got it
我得到的输出是
got it23
我怎样才能去掉'\r'
从变量?
另一个解决方案采用tr
:
echo $testVar | tr -d '\r'
cat myscript | tr -d '\r'
选项-d
表示delete
。
你可以用sed如下:
MY_NEW_VAR=$(echo $testVar | sed -e 's/\r//g')
echo ${MY_NEW_VAR} got it
顺便说一句,尝试做一个dos2unix
您的数据文件。
在你的脚本文件中使用此命令将其复制到Linux / Unix的后
perl -pi -e 's/\r//' scriptfilename
管sed -e 's/[\r\n]//g'
以除去两个回车返回( \r
)和换行( \n
)从每个文本行。
对于不调用外部程序的纯壳溶液:
NL=$'\n' # define a variable to reference 'newline'
testVar=${testVar%$NL} # removes trailing 'NL' from string
因为文件你源结束与回车线,内容$testVar
很可能是这样的:
$ printf '%q\n' "$testVar"
$'value123\r'
(第一行的$
是Shell提示符;第二行的$
距离%q
格式化字符串,表示$''
引述 。)
为了摆脱回车,你可以使用shell参数扩展和ANSI-C引用 (需要的Bash):
testVar=${testVar//$'\r'}
这将导致
$ printf '%q\n' "$testVar"
value123