2

このBashコードを考えると:

TEMP="1_2"
echo ${TEMP/_.*/}

なぜ1_2代わりに印刷するの1ですか?

私もこれらを試しましたが、機能しません:

echo ${TEMP/_\.*/}
echo ${TEMP/_\\.*/}

これは機能します:

echo ${TEMP/_[0-9]*/}

しかし、私は知りたいです:

  1. ピリオドがワイルドカードとして機能しないのはなぜですか?
  2. 代わりに何を使用すればよいですか?
4

1 に答える 1

5

疑問符は1文字のワイルドカードです。ただし、アスタリスクが数量詞である正規表現のようには機能しません。Bashでは、パラメーター展開では、アスタリスクは複数文字のワイルドカードです。

$ temp=1_2
$ echo "${temp/_*}"
1

以下もこの特定の状況で機能します。違いの詳細については、のパラメータ拡張を参照してください。man bash

echo "${temp%_*}"
echo "${temp%%_*}"

シェル変数または環境変数との名前の衝突の可能性を減らすために、すべて大文字の変数名を使用しないことをお勧めします。

于 2012-06-04T04:50:21.250 に答える