我是 shell 脚本的新手。我正在使用 source
命令导入一个在Windows上创建并含有回车符的文件。当我导入后并追加一些字符时,它总是会跳到行首。
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
选项代表删除
。
MY_NEW_VAR=$(echo $testVar | sed -e 's/\r//g')
echo ${MY_NEW_VAR} got it
顺便提一下,尝试在您的数据文件上执行dos2unix
命令。
printf'% q \ n' "$testVar"
的输出是什么样子的? - Benjamin W.VAR=$(cat <
- David GoodwintestVar=${testVar//$'\r'}
解决了问题。 - user3262284在将脚本文件复制到Linux/Unix后,请在脚本文件上使用此命令。
perl -pi -e 's/\r//' scriptfilename
perl
。我无法下载dos2unix
,tr
也无法使用等等!非常感谢! - Mrigank Pawagiperl -p -e 's/\r\n$//'
命令来仅从输入的末尾删除 \r\n
。 - Gordon Bean将文本传输到 sed -e 's/[\r\n]//g'
,以从每个文本行中删除回车符 (\r
) 和换行符 (\n
)。
\n
。请参考http://sed.sourceforge.net/sedfaq5.html#s5.10。 - Bryan如果要纯shell解决方案而不调用外部程序:
NL=$'\n' # define a variable to reference 'newline'
testVar=${testVar%$NL} # removes trailing 'NL' from string
dos2unix
的程序转换整个文件。 - Dave Fecho ${testVar%'\r'}
- AP22