
それでは、次のスキーマがあるとしましょう。
Thisisatest="1"
file
.
マッチしたい精密上記の文字列しかし、何らかの理由で、リストのいくつかの数値を繰り返し変数として使用し、次のことを行うことにしました。
Thisisatest="$varhere"
ここで、上記の数字$varhere
は上記の数字と同じです1
。 (屋根数字に言及しましたが、これ可能な将来のユースケースであり、まだ例です)
それでは、作業をより簡単にするために上記の内容と一致させたいとしましょう。精密模様しかし、上記の変数とその内容を使用して:
grep 'Thisisatest="$varhere"' file
ファイルに文字列Thisisatest="1"
と$varhere
数字が含まれています1
。
問題は、これがうまくいかないことです。なぜなら一重引用符の間に変数の拡張はありません(上記の図を参照)。
以下は、これに反論しようとする失敗した試みです。
- 変数交換用のコンテンツ交換
echo "${varhere/[0-9]*/Thisisatest=\"$varhere\"}"
echo
ここでは、出力が次のようになっていることを確認するために使用されます。正しい文字列なので、grep...への入力として使用でき、次のように出力します。
'Thisisatest="'1'"
- より多くの引用符を追加
echo "'Thisisatest="${varhere}"'"
出力:
'Thisisatest='1''
echo ''''Thisisatest=\"${varhere}\"''''
出力:
Thisisatest="'1'"
残りははっきりしています...今、最後の試みは私が望むものに近いようですが、それでもそうではありません。
上記のようにする方法はありますか?
答え1
grep "Thisisatest=\"${varhere}\""
私のために動作します。 " \
"はシェルの解釈を通して、次の文字の「私は特殊文字です」というフラグを反転します。