전체 변수를 이스케이프하는 방법은 무엇입니까?

전체 변수를 이스케이프하는 방법은 무엇입니까?

이 질문에 대한 답변 중:

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.

관련 정보