0

次のような変数があります。

disk=/dev/sda1

抽出したい:

  • 非数値部分のみ (つまり /dev/sda)
  • 数値部分のみ (つまり 1)

ディスクとパーティション番号が必要なスクリプトで使用します。シェル(主にbashとzsh)でそれを行うにはどうすればよいですか?

シェル パラメーター展開を使用することを考えていましたが、ドキュメントで動作パターンを見つけることができませんでした。

基本的に、私は試しました:

echo ${disk##[:alpha:]}

echo ${disk##[:digit:]}

しかし、どれも機能しませんでした。どちらも戻ってきました/dev/sda1

4

3 に答える 3

1

拡張は逆に機能します。あなた[:digit:]と 1 桁のみが一致します。数字まで、または数字からすべてを一致させる必要があるため、 を使用する必要があります*

以下は問題ないようです。

$ echo ${disk%%[0-9]*} ${disk##*[^0-9]}
/dev/sda 1

使用[:digit:]するには、二重中括弧が必要です。これは、文字クラスが で[:class:]あり、それ自体が 内にある必要があるため[ ]です。それが私が好む理由です0-9、タイピングが少ない*。以下は上記と同じです。

echo ${disk%%[[:digit:]]*} ${disk##*[^[:digit:]]}

* - 理論的には[0-9]、現在のロケールの影響を受ける可能性があるため、それらは等しくない可能性があります[0123456789]

于 2019-06-16T17:26:34.170 に答える