変数全体をエスケープする方法は?

変数全体をエスケープする方法は?

この質問に対する回答中:

https://superuser.com/questions/163515/bash-how-to-pass-command-line-arguments- Contains-special-characters

パラメータ全体をエスケープするには、関数のパラメータを二重引用符で囲む必要があります"[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.

関連情報