쉘 매개변수를 작은따옴표와 큰따옴표 이외의 문자로 묶을 수 있습니까?

쉘 매개변수를 작은따옴표와 큰따옴표 이외의 문자로 묶을 수 있습니까?

MySQL SELECT 쿼리를 유일한 매개변수로 사용하는 스크립트가 있습니다. 일반적으로 쿼리를 작은따옴표로 묶고 쿼리 내에서 큰따옴표를 사용하여 쿼리 자체의 매개 변수인 문자열을 묶습니다.

때로는 이로 인해 문제가 발생할 수 있습니다. 일반적으로 쿼리 자체에서 따옴표 문자(작은따옴표 또는 큰따옴표)를 검색해야 할 때 발생합니다. 작은따옴표와 큰따옴표를 올바르게 이스케이프 처리하면 이 문제가 해결될 수 있다고 확신하지만 MySQL과 Linux 셸은 서로 다른 이스케이프 방법을 사용할 수 있기 때문에 이는 까다롭습니다.


예...다음은 나에게 매우 어려워 보이는 예입니다. 백슬래시가 앞에 오는 작은따옴표 문자를 찾아야 합니다. 이 예는 MySQL 또는 CLI에서 문자를 이스케이프하기 위한 것이 아닙니다. 백분율 기호는 MySQL에서 와일드카드 문자 역할을 합니다.

./show-results 'SELECT * FROM `table` WHERE `column` LIKE "%\'%"'


쉘 매개변수를 묶는 데 작은따옴표나 큰따옴표 이외의 다른 것을 사용할 수 있습니까?

답변1

예제를 제공하지 않았으므로 이것이 효과가 있을지 잘 모르겠습니다.

여기에서 문서를 사용하세요.

echo "$(cat <<'EOF'
foo "x" bar 'x'
EOF
)"

이 명령을 실행하면 set -xbash가 이 명령을 이스케이프 처리하는 것을 볼 수 있습니다.

+ echo 'foo "x" bar '\''x'\'''
foo "x" bar 'x'

이제 샘플을 사용하여:

./show-results "$(cat <<'EOF'
SELECT * FROM `table` WHERE `column` LIKE "%\'%"
EOF
)"

올바른 이스케이프 매개변수를 생성합니다.

./show-results 'SELECT * FROM `table` WHERE `column` LIKE "%\'\''%"'

첫 번째 백슬래시는 내부 ''이므로 이스케이프 문자로 작동하지 않으며 \두 번째 백슬래시는 ''단일을 이스케이프하는 데 사용되는 external 이 됩니다 '.

관련 정보