我想在包含變數和多個“$”字符的 heredoc 中傳遞一個字串。沒有heredoc的命令是:
FOO='BAR'
echo ${FOO}: '$NOT_A_VARIABLE'
FOO變數被正確替換,并且字串'$NOT_A_VARIABLE'避免了替換,因為它是單引號。該命令按預期回傳:
BAR: $NOT_A_VARIABLE
現在,如果我在 heredoc 中做同樣的事情:
sh << EOF
echo ${FOO}: '$NOT_A_VARIABLE'
EOF
輸出不是我想要的:
BAR:
看起來,'$NOT_A_VARIABLE'即使它被單引號包圍,它也被有效地替換了。
我知道可以通過$用反斜杠轉義來避免這種情況:\$但是這個解決方案很煩人,因為字串中可能有多個$隨機分布的字符。
我想知道是否可以巧妙地使用引號(單引號/雙引號)或其他可能修復它的解決方案。
uj5u.com熱心網友回復:
您的 here 檔案的內容被視為雙引號字串,就像您寫的一樣
echo "$FOO: '$NOT_A_VARIABLE'" | sh
如果要禁止此處檔案中的所有引數擴展,可以參考分隔符:
sh << 'EOF'
echo ${FOO}: '$NOT_A_VARIABLE'
EOF
這將通過
echo ${FOO}: '$NOT_A_VARIABLE'
作為 的輸入sh。
如果您只想抑制特定的擴展,$請像在雙引號字串中一樣轉義。
# echo "$FOO: \$NOT_A_VARIABLE" | sh
sh << EOF
echo ${FOO}: \$NOT_A_VARIABLE
EOF
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416866.html
標籤:
上一篇:克隆git存盤庫后找不到模塊
下一篇:控制for回圈BASH中的排序
