5

次の行は、変数の前の先頭のテキストを削除します$PRECEDING

temp2=${content#$PRECEDING}

しかし、今は$PRECEDING大文字と小文字を区別しないようにしたいと思います。これはsedIフラグで機能します。しかし、私はコマンド全体を理解することはできません。

4

5 に答える 5

7

sed を呼び出したり、shopt を使用したりする必要はありません。これを行う最も簡単で迅速な方法 (Bash 4 を使用している場合):

if [ "${var1,,}" = "${var2,,}" ]; then
  echo "matched"
fi

そこで行っているのは、両方の文字列を小文字に変換し、結果を比較することだけです。

于 2015-08-25T17:43:51.087 に答える
4

でそれを行う方法は次のとおりです。

temp2=$(sed -e "s/^.*$PRECEDING//I" <<< "$content")

説明:

  • ^.*$PRECEDING:^文字列の開始を.意味し、任意の文字を.*意味し、任意の文字を 0 回以上意味します。つまり、これは「に格納されている文字列が続く (および含む) 文字列の先頭からの任意のパターンに一致する」ことを意味し$PRECEDINGます。
  • I部分は大文字と小文字を区別しないことを意味し、部分 (使用する場合) は最初の部分gだけではなく「すべての出現に一致する」ことを意味します。
  • <<<表記はherestringsのためのものなので、echo.
于 2012-12-12T20:38:28.910 に答える
1

私が考えることができる唯一の bash の方法は、一致があるかどうかを確認し (大文字と小文字を区別しない)、一致する場合は $content の先頭から適切な数の文字を除外することです。

content=foo_bar_baz
PRECEDING=FOO
shopt -s nocasematch
[[ $content == ${PRECEDING}* ]] && temp2=${content:${#PRECEDING}}
echo $temp2

出力:_bar_baz

于 2012-12-12T21:40:34.887 に答える