bash 스크립트에 변수를 전달할 때 작은따옴표나 큰따옴표를 이스케이프 처리하는 방법은 무엇입니까?

bash 스크립트에 변수를 전달할 때 작은따옴표나 큰따옴표를 이스케이프 처리하는 방법은 무엇입니까?

에코되는 스크립트가 있다고 가정 해 봅시다.$1

#!/bin/bash
echo $1

이라고 불렸습니다 test.sh. 그런 다음 에 전화했습니다 /bin/test.sh 'test'. 그러나 이것은 test작동하지 않습니다.

/bin/test.sh 'te'st'

문법적 오류가 있습니다.

예를 들어, 이 두 개의 작은따옴표 사이에는 무엇이든 있을 수 있습니다.

/bin/test.sh 'te"s"t'` or `/bin/test.sh 'te's't'` or `/bin/test.sh 'te"s't'

이 문제를 해결할 방법이 있나요? 따옴표만 사용할 수 있습니다. 변수 내부의 내용을 변경할 수 없습니다. 이는 로그 구문 분석입니다. 로그 항목에는 무엇이든 포함될 수 있습니다.

이러한 매개변수를 올바르게 받아들이려면 bash가 필요합니다.

예:

/bin/test.sh '2015.11.11 07:45:44.060|executor-2|||ERROR|236 - PDF document for 5616904 wasn't created!'

'단어의 단일 소리가 문자열 내에 없기 때문에 이것은 작동하지 않습니다 .

문자열은 내가 쓴 대로 정확하게 배치됩니다. Zabbix(모니터링 솔루션)와 함께 사용하고 있습니다. Zabbix에서는 다음과 같이 표시됩니다.

/bin/test.sh '{$TRIGGER.VALUE}'

그러나 결국 {$TRIGGER.VALUE}실제 문자열로 대체되고 스크립트는 리터럴 값으로 호출됩니다.

답변1

귀하의 접근 방식에는 근본적으로 결함이 있습니다. 당신은 수송을 위해 고기를 갈아 햄버거로 만들고, 결국 소를 되찾고 싶어합니다. 아니요, 작동하지 않습니다.

문자열을 쉘 명령에 직접 삽입하지 말고 대신 인수로 전달하십시오. 나는 Zabbix에 익숙하지 않지만 문서를 보면 이것이 작동하는 방식인 것 같습니다(예:외부검사,사용자 매개변수: 명령과 그에 필요한 매개변수를 지정합니다. 따라서 이를 명령으로 지정 test.sh하고 그것이 가져오는 매개변수가 임을 지정하십시오 "{TRIGGER.VALUE}". 분명히(다시 말하지만, 저는 Zabbix에 익숙하지 않습니다) 이는 귀하가 다음과 같은 내용을 썼다는 것을 의미합니다.

test.sh["{TRIGGER.VALUE}"]

에서 test.sh스크립트의 인수를 인용하려면 다음을 기억하세요."$1"대신 글을 쓰셔야 합니다$1.

답변2

명령줄에 작은따옴표를 넣으려면 큰따옴표나 백슬래시를 사용하세요.

test.sh "'test'"
test.sh \'test\'

그러나 귀하의 게시물을 보면 실제 문제는 다른 것 같습니다.

변수 내부의 내용을 변경할 수 없습니다

변수에 이미 문자열이 있는 경우 변수를 큰따옴표로 묶어 값을 변경하지 않고 전달하면 됩니다.

test.sh "$var"

관련 정보