1

我有这个脚本,我正在逐行读取文本文件并执行命令。我发现字符串(又名行)总是以'\r'.

我想从字符串的末尾删除 CR。

这就是我的代码的样子:

file="myfilelist.txt"

while IFS= read -r filename
do

git log --oneline -- ${filename} |wc -l

done <"$file"

我希望能够在循环中执行命令,而不是\r在每行字符串(又名文件名)的末尾。

4

1 回答 1

8

尝试这个:

git log --oneline -- $(echo "$filename" | tr -d '\r') | wc -l

$filename请注意,当被空格包围时,您不需要大括号。

原则上你也可以通过 bash 自己的参数扩展机制来做到这一点:

git log --oneline -- ${filename%^M} | wc -l

^M必须是文字 control-M 字符,这很难看且难以维护。

或者您可以删除名称末尾的所有空白字符(包括^M空格、制表符等):

git log --oneline -- ${filename%[-[:space:]]} | wc -l

但是现在我们正在研究那些不阅读手册就很少有人能认出的技术。

于 2012-07-31T06:21:47.580 回答