< > ^ 문자가 변수에서 누출되는 것을 방지합니다.

< > ^ 문자가 변수에서 누출되는 것을 방지합니다.

표시하려는 텍스트에 "명령"이 포함되어 있어 스크립트가 중지된 것 같습니다.

자막 파일의 처음 20줄을 표시하는 코드:

junknownsub=$(head -20 "$f")
zenity --question  --text="$jsubtitle\n\nIs this English?\n\n$junknownsub"  --width=200 --height=200

다음은 텍스트입니다.

0
00:00:00,000 --> 00:00:18,338
<b><font color="#909090">^.^.^.^.movie .^.^.^.^</font></b>
<b><font color="#804040">®</font></b> <b><font color=#ff0000> </font></b> <b><font color="#804040">®</font></b>

이로 인해 Linux에서 다음 질문이 표시됩니다.팝업

나는 모든 "일반" 텍스트가 아무 문제 없이 잘 작동하기 때문에 문제를 일으키는 것은 < >^ 문자라고 생각합니다.

어쨌든 이 문제를 해결할 방법이 있나요?

내가 이전에 받은 조언은 다음과 같습니다. printf -v junknownsub '%q' $(head -n20 "$f") 하지만 이것은 Nemo를 정지시킬 뿐입니다.

답변1

일부 대화 상자가 표시됨그놈 제니티지원하다Pango 마크업 언어기본적으로 대화 상자 텍스트에서 해석합니다. zenity예제의 텍스트가 잘못된 pango 태그로 구문 분석되고 있습니다. 이것은 쉘 문제가 아닙니다.

이를 방지하려면 다음을 수행할 수 있습니다.

  • --no-markup옵션을 사용하세요. 단점은 \n대화 상자 텍스트의 형식을 지정하는 데 사용되는 순서를 포함하여 마크업이 문자 그대로 표시된다는 것입니다 .
  • 마커를 제거하기 위해 자막 텍스트를 전처리합니다.

관련 정보