**별칭을 사용하여 작은따옴표를 이스케이프 처리합니다. [중복]

**별칭을 사용하여 작은따옴표를 이스케이프 처리합니다. [중복]

과거에 작은따옴표를 이스케이프 처리하는 방법에 대해 많은 질문이 있었다는 것을 알고 있지만 그 중 어느 것도 이를 수행하는 방법에 대한 문제를 다루지 않았습니다.별칭 있음.

최신 버전의 bash(4.4.0(1))에서 정규식을 사용하는 sed/awk/grep/perl 명령을 대체하기 위해 여러 별칭을 성공적으로 정의했습니다.

예를 들어, 다음별칭은 큰따옴표를 이스케이프할 수 있습니다.임의의 문자열에서:

alias esc_double_quotes=$'sed \'s|"|\\\\"|g\''
string="JC's alias to escape \"double quotes\""
echo "$string" | esc_double_quotes
JC's alias to escape \"double quotes\"

그러나,별칭으로 작은따옴표를 이스케이프 처리하면 작업이 불가능한 것 같습니다..

난 이미 시도했어5가지 방법모두 다른 이유로 실패합니다.

# 1) My first technique
alias esc_single_quotes=$'sed \"s|'|\\\\'|g\"'
# 2) My second technique
alias esc_single_quotes="sed 's|'\''|\\\'\''|g'"
# 3) My third technique
alias esc_single_quotes="sed \"s|'|\\\\'|g\""
# 4) Technique inspired from http://stackoverflow.com/questions/1250079/how-to-escape-single-quotes-within-single-quoted-strings?answertab=active#tab-top
alias esc_single_quotes='sed '"'"'s|'|\\\\'|g'"'"
# 5) Technique inspired from http://stackoverflow.com/posts/1315213/revisions
alias esc_single_quotes='sed '\''s|'|\\\\'|g'\'''

누군가가 이 불가능한 도전에 나서서 내가 틀렸다는 것을 증명할 수 있을까요?

답변1

나는 즉시 모든 것에서 벗어날 수 있다

printf "%q\n" "$string"

하지만 당신의 대답은 다음과 같습니다.

alias esc_single_quotes="sed \"s/'/\\\\\\\\'/g\""
echo  "$string" | esc_single_quotes 
JC\'s alias to escape "double quotes"

또는:

alias esc_single_quotes='sed "s/'\''/\\\\'\''/g"'
echo  "$string" | esc_single_quotes 
JC\'s alias to escape "double quotes"

답변2

우리의 눈을 돕기 위해 단순화합시다:

$ alias esc_single_quotes='sed "s|\x27|\x5c\x5c\x27|g"'

$ echo "this is 'something'"
this is 'something'

$ echo "this is 'something'" |esc_single_quotes
this is \'something\'

답변3

#!/usr/bin/env bash

function esc_double_quotes() {
    echo $* | sed 's|"|\\\\"|g'
}

관련 정보