stdinを介してbashにコマンドを提供するときに変数を使用することはできません。

stdinを介してbashにコマンドを提供するときに変数を使用することはできません。

C popen呼び出し(calls)を使用してsh -c '<command>'小さなシェルスクリプトを実行する必要があります。スクリプトを実行できません。私はこの部分に問題を分けました。

#!/bin/bash

sh -c 'bash -xev -s << EOF
a=1
echo "a=$a"
EOF'

どの出力

a=1
+ a=1
echo "a="
+ echo a=
a=

私は何を見逃していますか?なぜstdinの変数を使用できないのですか?

(バージョン:GNU bash 5.1.4、ダッシュ0.5.11 + git20200708 + dd9ef66-5)

ベストアンサー1

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- 参照

おすすめ記事