我收到一个不想要的 '?'执行此操作时在我的文件名末尾:
emplid=$(grep -a "Student ID" "$i".txt | sed 's/(Student ID: //g' | sed 's/)Tj//g' )
#gets emplid by doing a grep from some text file
echo "$emplid" #prints employee id correctly
cp "$i" "$emplid".pdf #getting an extra '?' character after emplid and before .pdf
也就是说,我得到的不是像 123456.pdf 这样的文件名,而是 123456?.pdf 。 如果 echo 打印正确,为什么会发生这种情况? 如何删除结尾的问号字符?
最佳答案
听起来您的脚本文件具有 DOS 样式的行结尾 (\r\n) 而不是 unix 样式的行结尾(只是\n)——当脚本采用这种格式时,\r 被视为命令的一部分.在本例中,它包含在 $emplid 中,因此包含在文件名中。
许多平台支持dos2unix
命令将文件转换为unix 风格的行尾。转换后,坚持使用支持 unix 风格文本文件的文本编辑器。
编辑:我假设问题行结尾在 shell 脚本中,但看起来它们在输入文件 ("$i".txt) 中。您可以在输入文件上使用 dos2unix 来清理它和/或向脚本中的 sed 命令添加清理步骤。顺便说一句,您可以使用 -e 选项让单个 sed 实例应用多个编辑:
emplid=$(grep -a "Student ID" "$i".txt | sed '-e s/(Student ID: //g' -e 's/)Tj//g' -e $'s/\r$//' )
我建议反对使用 sed 's/.$//'
-- 如果文件是 unix 格式,那将切断最后一个字 rune 件名。
关于bash - 文件名末尾的 Shell 脚本不需要的 '?' 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13258123/