Bash
通過標準輸入向 bash 提供命令時無法使用變數
我需要使用 C popen 呼叫(呼叫
sh -c '<command>'
)執行一個小的 shell 腳本。我無法讓我的腳本工作。我將問題隔離到這個片段:#!/bin/bash sh -c 'bash -xev -s << EOF a=1 echo "a=$a" EOF'
哪個輸出
a=1 + a=1 echo "a=" + echo a= a=
我錯過了什麼?為什麼我不能使用標準輸入中的變數?
(版本:GNU bash 5.1.4,破折號 0.5.11+git20200708+dd9ef66-5)
除非您引用或轉義以下部分的某些部分,否則 here-document 的正文將受到參數擴展、命令替換和算術擴展的影響
EOF
:$ sh -c 'bash -xev -s << \EOF a=1 echo "a=$a" EOF' a=1 + a=1 echo "a=$a" + echo a=1 a=1
您也可以使用正常引號
"EOF"
或'EOF'
.對於更複雜的情況,例如您希望某些但不是所有變數都由外殼擴展,您可以保留未加
EOF
引號並轉義特定變數,例如\$a
- 請參見