我有这个脚本,我在逐行读取文本文件并执行命令。我发现字符串(又名行)始终以'\r'
结尾。
我想从字符串的末尾删除CR。
这就是我的代码的样子:
file="myfilelist.txt"
while IFS= read -r filename
do
git log --oneline -- ${filename} |wc -l
done <"$file"
我希望能够在每个行字符串(也就是文件名)的末尾没有\r
的循环中执行命令。
答案 0 :(得分:8)
试试这个:
git log --oneline -- $(echo "$filename" | tr -d '\r') | wc -l
请注意,当$filename
被空格包围时,您不需要大括号。
原则上你也可以通过bash自己的参数扩展机制来做到这一点:
git log --oneline -- ${filename%^M} | wc -l
但是^M
必须是一个文字控件-M字符,这个字符难看且难以维护。
或者您可以删除名称末尾的所有空格字符(包括^M
以及空格,制表符等):
git log --oneline -- ${filename%[-[:space:]]} | wc -l
但现在我们正在研究很少有人在不阅读the manual的情况下可能认出的技术。