我有这个脚本,我正在逐行读取文本文件并执行命令。我发现字符串(又名行)总是以'\r'
.
我想从字符串的末尾删除 CR。
这就是我的代码的样子:
file="myfilelist.txt"
while IFS= read -r filename
do
git log --oneline -- ${filename} |wc -l
done <"$file"
我希望能够在循环中执行命令,而不是\r
在每行字符串(又名文件名)的末尾。
我有这个脚本,我正在逐行读取文本文件并执行命令。我发现字符串(又名行)总是以'\r'
.
我想从字符串的末尾删除 CR。
这就是我的代码的样子:
file="myfilelist.txt"
while IFS= read -r filename
do
git log --oneline -- ${filename} |wc -l
done <"$file"
我希望能够在循环中执行命令,而不是\r
在每行字符串(又名文件名)的末尾。
尝试这个:
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
但是现在我们正在研究那些不阅读手册就很少有人能认出的技术。