Bash
bash 轉義引號
對於如何在 bash 腳本中轉義引號,我遇到了一個有趣的挑戰。
我的 bash 腳本有一個很長的 curl 呼叫,其中傳遞了一個大的 -d json 結構。
#!/bin/bash Value4Variable=Value4 curl -s -X POST -H "Content-Type: application/json" -H "Accept: application/json" -d \ '{"Variable1":"Value1", "Variable2":"Value2\'s", # escape of quote doesnt work because of the previous single quote and backslash "Variable3":"Value3", "Variable4":"'"$Value4Variable"'", "Variable5":"Value5" }' \ https://www.hashemian.com/tools/form-post-tester.php
在 json 結構中添加單引號的最佳方法是什麼?我嘗試了各種組合,但沒有成功。
有多種方法可以用不同的引號轉義長字元串。最簡單的就是結束單引號,轉義單引號:
'...'\''...'
但是你可以做一些更好的事情。Heredocs 是避免引用問題的好方法:
curl -s -X POST https://www.hashemian.com/tools/form-post-tester.php \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d @- <<EOF { "Variable1":"Value1", "Variable2":"Value2's", "Variable3":"Value3", "Variable4":"$Value4Variable", "Variable5":"Value5" } EOF
@-
告訴 curl 從標準輸入讀取並<<EOF
啟動將被輸入 curl 標準輸入的 heredoc。heredoc 的好處是您不需要轉義任何引號,並且可以在其中使用 bash 變數,無需擔心如何轉義引號並使整個內容更具可讀性。