Shell-Script

防止 < > ^ 字元洩漏出變數

  • August 28, 2020

我認為我的腳本停止了,因為它即將顯示的文本包含“命令”

顯示字幕文件前 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 --&gt; 00:00:18,338
&lt;b&gt;&lt;font color="#909090"&gt;^.^.^.^.movie .^.^.^.^&lt;/font&gt;&lt;/b&gt;
&lt;b&gt;&lt;font color="#804040"&gt;®&lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color=#ff0000&gt; &lt;/font&gt;&lt;/b&gt; &lt;b&gt;&lt;font color="#804040"&gt;®&lt;/font&gt;&lt;/b&gt;

這導致linux彈出這個問題:彈出

我懷疑是 < >^ 字元搞砸了,因為所有“正常”文本都沒有任何問題。

無論如何要解決這個問題?

我之前得到的一個建議是: printf -v junknownsub '%q' $(head -n20 "$f") 但這只會凍結尼莫

GNOME Zenity顯示的一些對話框支持pango 標記語言,預設情況下,在對話框文本中解釋它。zenity正在將範例中的文本解析為無效的 pango 標記。這不是外殼問題。

為了防止這種情況,您可以:

  • 使用該--no-markup選項。不利的一面是,標記將按字面顯示,包括\n您用於格式化對話框文本的序列。
  • 預處理您的字幕文本以刪除標記。

引用自:https://unix.stackexchange.com/questions/606754