この質問に対する回答中:
パラメータ全体をエスケープするには、関数のパラメータを二重引用符で囲む必要があります"[abc]_[x|y]"
。
ただし、特殊文字が"
()の先頭にある場合は、"[abc]_[x|y]"
次のことはできません。
program ""[abc]_[x|y]" anotheragument
"
この状況でどのように脱出できますか?
答え1
私が正しく理解したら、変数に正規表現パターンがあり、grep
正規表現メタ文字に特別な意味を持たずにそれを使用したいと思います。この場合-F
(固定文字列)オプションがgrep
必要です。
grep -F "$var" your_file
システムにfgrep
上記の()と同じ特殊コマンドがあるかもしれません。
fgrep "$var" your_file
答え2
一重引用符は必要に応じて実行する必要があります。
# " is the special charater
var='"hello "word";'
grep "$var" file
Bashのマニュアルページから:
Enclosing characters in single quotes preserves the literal value of each character within the quotes. A single quote may not
occur between single quotes, even when preceded by a backslash.
Enclosing characters in double quotes preserves the literal value of all characters within the quotes, with the exception of $, ‘,
\, and, when history expansion is enabled, !. The characters $ and ‘ retain their special meaning within double quotes. The
backslash retains its special meaning only when followed by one of the following characters: $, ‘, ", \, or <newline>. A double
quote may be quoted within double quotes by preceding it with a backslash. If enabled, history expansion will be performed unless
an ! appearing in double quotes is escaped using a backslash. The backslash preceding the ! is not removed.