我想轉義存盤在 bash 腳本變數中的檔案路徑。我閱讀了幾個關于轉義回勾的執行緒,或者但它似乎無法正常作業:
我有這個變數:在 bash 腳本執行期間作為用戶引數輸入變數值
CONFIG="/home/teams/blabla/blabla.yaml"
我需要將其更改為: \/home\/teams\/blabla\/blabla.yaml
我怎樣才能通過 sed 左右(不是手動)在腳本中做到這一點?
uj5u.com熱心網友回復:
使用 GNU bash 及其引數擴展:
echo "${CONFIG//\//\\/}"
輸出:
\/home\/teams\/blabla\/blabla.yaml
uj5u.com熱心網友回復:
echo "/home/teams/blabla/blabla.yaml" | sed 's/\//\\\//g'
\/home\/teams\/blabla\/blabla.yaml
解釋:
反斜杠用于將以下字母/符號設定為正則運算式,反之亦然。當您需要反斜杠作為字母時,使用雙反斜杠。
uj5u.com熱心網友回復:
使用此問題中的解決方案,在您的情況下,它將如下所示:
CONFIG=$(echo "/home/teams/blabla/blabla.yaml" | sed -e 's/[]\/$*.^[]/\\&/g')
uj5u.com熱心網友回復:
為什么需要轉義?這是XY 問題嗎?
如果問題是您嘗試在替換正則運算式中使用該變數,那么給出的示例應該可以作業,但您可能會通過消除一些“傾斜牙簽綜合癥”而受益,許多工具可以通過使用不同的匹配來做到這一點分隔符。sed, 例如:
$: sed "s,SOME_PLACEHOLDER_VALUE,$CONFIG," <<< SOME_PLACEHOLDER_VALUE
/home/teams/blabla/blabla.yaml
不過要非常小心。逗號是檔案名中完全有效的字符,幾乎除了NULL 之外的任何字符也是如此。了解您的資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/314548.html
上一篇:Shell:重命名檔案
