이 질문에 대한 답변 중:
전체 매개변수(예: )를 이스케이프하려면 함수의 매개변수를 큰따옴표로 묶어야 한다고 나와 있습니다 "[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.