Как избежать цельной переменной?

В ответе на это:

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

Он сказал, что мы должны поместить аргумент функции в Doublequotes, чтобы избежать всего аргумента (как в "[abc]_[x|y]" ).

Но что, если специальный символ " в начале» ( "[abc]_[x|y]" ), мы не можем сделать следующее:

 program ""[abc]_[x|y]" anotheragument 

Как я могу избежать " в этом случае?

Если вы правильно поняли, у вас есть шаблон регулярного выражения в переменной, и вы бы хотели, чтобы grep использовал его, не придавая особого значения метасимволам регулярных выражений. Если это так, опция -F (фиксированные строки) для grep – это то, что вы хотите:

 grep -F "$var" your_file 

Ваша система может также иметь специальную команду ( fgrep ), эквивалентную приведенной выше:

 fgrep "$var" your_file 

Одиночные кавычки должны выполнять то, что вы хотите.

 # " 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.