명령줄 변수 출력 문자열의 이스케이프 포인트 및 별표

명령줄 변수 출력 문자열의 이스케이프 포인트 및 별표

다음을 통해 환경 변수를 설정하는 명령이 있습니다.

BLACKLIST=$(python tools.py gen-blacklist)

*그러면 다음과 같이 점과 별표가 포함된 문자열이 생성됩니다 *.

LISTEN,UNLISTEN,NOTIFY,SHOW,REFRESH,pg_notify,.*remove,.*delete,.*update,.*create,.*insert

문자열의 모든 점과 별표를 이스케이프 처리할 수 있기를 원합니다. 이것이 제가 시도한 것입니다.

TEMP=$(python tools.py gen-blacklist) && BLACKLIST=$(echo ${TEMP/.\*/\\.\\*}) && echo $BLACKLIST

그러나 이는 첫 번째 발생만 대체합니다.

LISTEN,UNLISTEN,NOTIFY,SHOW,REFRESH,pg_notify,\.\*remove,.*delete,.*update,.*create,.*insert

*합계 의 모든 항목을 어떻게 피합니까 .?

답변1

xy 문제 냄새가 나지만 어쨌든 ...

~에서매개변수 확장, 이것은 ${parameter/pattern/string}-style 확장에 대해 설명서에 나와 있는 내용입니다.

패턴이 "/"로 시작하면 해당 패턴이 모두 문자열로 대체됩니다. 일반적으로 첫 번째 발생만 대체됩니다.

따라서 ${TEMP/.\*/\\.\\*}다음으로 변경해야 합니다( 바로 다음에 나오는 추가 내용 참고 ${TEMP//.\*/\\.\\*})./TEMP

이는 LISTEN,UNLISTEN,NOTIFY,SHOW,REFRESH,pg_notify,\.\*remove,\.\*delete,\.\*update,\.\*create,\.\*insert

답변2

견적 더보기(™) ....

노력하다:

TEMP=$(python tools.py gen-blacklist) &&
echo "$TEMP"

정말로 점과 별표를 피해야 한다면 (bash에서) 다음을 사용하세요:

TEMP=$(python tools.py gen-blacklist) &&
BLACKLIST=${TEMP//\.\*/\\.\\*} &&
echo "$BLACKLIST"

관련 정보