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