我是 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
代表delete
。
您可以按如下方式使用 sed:
MY_NEW_VAR=$(echo $testVar | sed -e 's/\r//g')
echo ${MY_NEW_VAR} got it
顺便说一句,试着dos2unix
对你的数据文件做一个。
由于您获取的文件以回车符结尾,其内容$testVar
可能如下所示:
$ printf '%q\n' "$testVar"
$'value123\r'
(第一行$
是 shell 提示符;第二行$
来自%q
格式化字符串,表示$''
引用。)
要摆脱回车,您可以使用shell 参数扩展和ANSI-C 引用(需要 Bash):
testVar=${testVar//$'\r'}
这应该导致
$ printf '%q\n' "$testVar"
value123
将脚本文件复制到 Linux/Unix 后在脚本文件上使用此命令
perl -pi -e 's/\r//' scriptfilename
管道以从每个文本行sed -e 's/[\r\n]//g'
中删除回车符 ( \r
) 和换行符 ( )。\n
对于无需调用外部程序的纯 shell 解决方案:
NL=$'\n' # define a variable to reference 'newline'
testVar=${testVar%$NL} # removes trailing 'NL' from string