1

このスクリプトでは、テキストファイルを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 に答える