シェルスクリプトからディレクトリを読む

シェルスクリプトからディレクトリを読む

シェルスクリプトの変数へのパスの下に番号が付けられたディレクトリを読みたいです。パスは次のとおりです。

.../releases/R1/...
.../releases/R2/...
.../releases/R3/...

スクリプトが実行されるたびに、最新の番号のR(この場合はR3)ディレクトリを変数として読み込み、それをスクリプト内の一部の関数にパラメータとして渡したいと思います。どうすればいいですか?

ベストアンサー1

zshを使用している場合、これは最も簡単です。グローバル予選[-1]最後の一致を維持し、一致が前に表示されるnように数字で並べ替えます。グローバルパターンを活用して数値を一致させることもできます。R9R10<->

last_release=(releases/R<->(n[-1]))
if (($#last_release == 0)); then
  echo 1>&2 "Fatal error: no release available"
  exit 2
fi

ポータブルツールのみを使用する最も簡単な方法は、数値のソートをsort。ファイル名のうち。releasesls

set_last_release () {
  set -- $(ls releases | sed -n 's/^R\([0-9][0-9]*\)//p' | sort -rn)
  if [ $# -eq 0 ]; then
    echo 1>&2 "Fatal error: no release available"
    exit 2
  fi
  last_release=releases/R$1
}

バージョン番号の前に0を使用すると、シェルに組み込まれているソート機能を使用できます。R1つ以上の数字で構成されるファイル名のみを一致させる移植可能な方法はありません。 kshではこれを使用できます。releases/R+([0-9])スクリプトの先頭に置くとbashでも使用できます。関数を解析して実行します。)shopt -s extglob

set_last_release () {
  set -- releases/R[0-9]*
  if [ "$1" = 'releases/R[0-9]*' ]; then
    echo 1>&2 "Fatal error: no release available"
    exit 2
  fi
  eval last_release=\$$#
}

おすすめ記事