bash: 문자를 이스케이프하지 않고 변수에 텍스트 넣기

bash: 문자를 이스케이프하지 않고 변수에 텍스트 넣기

이 문자열을 변수에 이스케이프 처리하는 것에 대해 걱정할 필요 없이 변수에 넣고 싶습니다.

j!'^+%&/()=1!'^+%&/()c

시도 1: (실패)

VAR='''j!'^+%&/()=1!'^+%&/()c'''
bash: !'^+%: event not found

어떻게 해야 합니까?

답변1

~에서이 답변:

$ IFS='' read -r -d '' var <<'EOF'
j!'^+%&/()=1!'^+%&/()c
EOF
$ echo "$var"
j!'^+%&/()=1!'^+%&/()c
$

또는 셸이 아닌 다른 프로그램을 통해 입력을 허용합니다 cat.

$ var=$(cat)
j!'^+%&/()=1!'^+%&/()c        
$ echo "$var"
j!'^+%&/()=1!'^+%&/()c
$

입력 후 +를 Enter누르세요 .CtrlD

또는 bash다음을 사용하십시오 printf.

$ xargs -0 printf "\n%q\n"
j!'^+%&/()=1!'^+%&/()c
'j!'\''^+%&/()=1!'\''^+%&/()c'
$ var='j!'\''^+%&/()=1!'\''^+%&/()c'
$ echo "$var"
j!'^+%&/()=1!'^+%&/()c
$

여기 당신이 필요합니다아니요을 누르고 +를 Enter누르세요 .CtrlD 두 배인용하고 싶은 텍스트를 입력한 후

답변2

저는 이 작업을 많이 수행하며 항상 전체 문자열을 큰따옴표로 묶고 큰따옴표(\")나 달러 기호(\$)를 이스케이프 처리하기로 결정했습니다. 이는 다른 무엇보다 기억하기 쉽습니다.

흔히 간과되는 또 다른 기술은 인접한 문자열을 서로 다른 따옴표로 연결하는 것입니다.

VAR=" string without double-quotes "' string with "double-quotes" '

여기에는 따옴표가 눈에 띄도록 공백을 추가했습니다. 큰따옴표와 가운데 작은따옴표 사이에는 공백이나 어떤 것도 있어서는 안 됩니다. 이는 각각 첫 번째 문자열의 끝 부분과 두 번째 문자열의 시작 부분에 위치합니다. 인접한 두 문자열이 연결됩니다.

관련 정보