Php
如何在 Bash 中正確轉義和插入變數?
我正在嘗試編寫一個單行程式碼來轉換某些文件中存在的 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 認為它們是可插值變數,並將它們替換掉。