Php

如何在 Bash 中正確轉義和插入變數?

  • May 27, 2013

我正在嘗試編寫一個單行程式碼來轉換某些文件中存在的 html 實體(所有 html 都使用 UTF-8 編碼)

我已經嘗試過 recode HTML_4.0 file.htm ,但這也轉換了非 ASCII 字元(它破壞了 UTF-8 字元)

StackOverflow中,我發現了適用於一個文件的內容:

php -r '$f=@fopen("file.htm", "r");echo html_entity_decode(fread($f, 20000));fclose($f);'

但是當我嘗試為多個文件製作它時

for fi in *.htm; do php -r '$f=@fopen("$fi", "r");echo html_entity_decode(fread($f, 20000));fclose($f);';done

我知道這裡的問題是如何“轉義” $fi (bash 變數),因此 PHP 不會將其作為 PHP 變數讀取。有什麼建議嗎?

你快到

碰巧的是,問題不在於如何去做,而在於如何讓 bash 解釋變數並傳遞它們。

你有:

for fi in *.htm; do php -r '$f=@fopen("$fi", "r");echo html_entity_decode(fread($f, 20000));fclose($f);';done

其中有單引號,裡面有雙引號。

bash不會在內部插入單引號,但是雙引號是..所以如果將其更改為:

for fi in *.htm; do php -r "\$f=@fopen(\"$fi\",'r');echo html_entity_decode(fread(\$f, 20000));fclose(\$f);"; done

因為我們現在使用雙引號,所以我們還必須轉義 $ 符號,否則 bash 認為它們是可插值變數,並將它們替換掉。

引用自:https://serverfault.com/questions/511182