1

私はこれを理解するのに苦労しています。ブレース展開とmvコマンドを調査しましたが、何らかの理由でまだ意味がありません。Unix と Linux のシステム管理ハンドブックを読んでいて、これを例として使用していますが、次の行を理解していません。

mv $fname ${fname/.log/.LOG};

$fname.log を使用して現在の変数を移動していることに気付きましたが、${fname/.log/.LOG};混乱しています。基本的にソース・デスティネーションだと思っていたmvのですが…では、なぜ2つの/があるのでしょうか? 誰かが私にこれを平易な英語で説明できれば、私は最も感謝しています!

#!/bin/bash

find . -type f -name '*.log' | grep -v .do-not-touch | while read fname;
do
mv $fname ${fname/.log/.LOG/};
done
4

2 に答える 2

1

あなたが言ったように、 $fname には「.log」で終わる元のファイル名が含まれています。表示される bash 式は次のように述べています。変数 $fname の内容を取得し、「.log」を見つけて「.LOG」に置き換えます。結果の行は、「.log」で終わるファイルを同じ名前のファイルに移動しますが、「.log」は「.LOG」に置き換えられます。

高度な bash スクリプト ガイドについては、http://tldp.org/LDP/abs/html/またはhttp://www.tldp.org/LDP/abs/abs-guide.pdfを参照してください。

于 2013-05-02T08:25:15.550 に答える