Bashスクリプトで、なぜ
message='123456789'
echo "${message//[0-9]/*}"
表示*********
だが
message='123456789'
echo "${message//./*}"
123456789
?
私が見たすべてのドキュメントは、.
がbashであっても正規表現の任意の文字に一致すると述べていますが、それは私にとっては機能しません。 bashのどの文字とどのように一致しますか?
ドキュメントのどこで.
がパターンマッチングでの任意の文字を意味すると言っていますか? man bash
には次のように書かれています:
Pattern Matching
Any character that appears in a pattern, other than the special
pattern characters described below, matches itself. The NUL
character may not occur in a pattern. A backslash escapes the
following character; the escaping backslash is discarded when
matching. The special pattern characters must be quoted if
they are to be matched literally.
The special pattern characters have the following meanings:
* Matches any string, including the null string.
When the globstar Shell option is enabled, and
is used in a pathname expansion context, two
adjacent *s used as a single pattern will match
all files and zero or more directories and
subdirectories. If followed by a /, two
adjacent s will match only directories and
subdirectories.
? Matches any single character.
正規表現はシェルパターンマッチングと同じではありません: https://unix.stackexchange.com/questions/439875/why-not-seeing-Shell-globs-as-a-dialect-of-regex =。 Bashで${parameter/pattern/string}
構文を使用してすべての文字を別の文字に置き換える場合は、次のように?
を使用する必要があります。
$ echo "${message//?/*}"
*********
sed
などの正規表現を使用するプログラムでは、.
の代わりに?
を使用できます。
$ sed 's,.,*,g' <<< "$message"
*********