ファイルのリネーム(p.114)

  • 10行目
  • 11行目
    • dir='echo "$dir" | sed 's/¥/$//'`
      • “$dir”のダブルクオーテーションは、クオーテーション内の変数を置き換える($を変数指定の文字として扱う)時に用いる。
      • 反対に、sed ‘ s/¥/$//’のシングルクオーテーションは文字列を置き換えない(特殊文字を特殊文字のまま解釈する)。従って正規表現の$を変数指定の文字ではなく、正規表現における行末を表す$として解釈する。
    • sedコマンドで行末にある「/」を「」で置き換える、つまり行末の「/」を取り除く、という意味になる。
      例)変数$dirが/foo/bar/であったならば、/foo/barという値がdirにセットされる。
  • 12行目
    • if expr “$filename” : ‘.*[A-Z] >/dev/null; then
      • 変数$filenameの中に、AからZのグループに含まれる文字があるかどうか(つまり大文字が含まれるかどうか)をexprコマンドでチェックしている。
        もし大文字が含まれているならばexprコマンドの結果として大文字の文字数が返され、含まれていなければ「0」が返される(if文では「0」は偽であり、それ以外の数字が「真」となる)。
    • 0以外の数字であれば、then以下の命令を実行せよ、ということになる。
  • 17行目
    • if [ “$answer” = “y” -o “$answer” = “Y” ]; then
      • testコマンド中央にある「-o」オプションはtestコマンドにおける論理和(OR条件)指定。
      • 19行目と22行目で同じ命令文
        mv -i $dir/$filename $dir/$rename
        が与えられているが、これは19行目の命令は変数$argに初期値-iが指定されていて対話的に命令を実行するのに対し、22行目はelseの場合、つまり変数$argにrename.shのオプションである-fが(明示的に)指定されている場合の命令実行を意味している。
    • ファイル名の大文字を小文字にリネームするという動作をインタラクティブに行うか確認なしで行うかをifの条件式で分けているだけなので、mv -iでリネームするという動作自体は変わらない。

boota

いろんなモノに、いろんな意味で、ヲタ。なのかも?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)