bashファイルに複数行変数を追加する

bashファイルに複数行変数を追加する

phpmyadminを設定するためにbashスクリプトを作成しようとしています。 config.inc.phpファイルを作成し、ここに設定ファイルを追加しようとしています。ファイルには、この関数と一緒にフグの秘密が含まれています。$(openssl rand -base64 50)ファイルは生成されますが、生成されません。追加します。結果がファイルに$(openssl rand -base64 50)追加されます。$(openssl rand -base64 50)

これはコードです

phpmyadmin_config='
<?php
declare(strict_types=1);
$cfg["blowfish_secret"] = "$(openssl rand -base64 50)";
$i = 0;
$i++;
$cfg["Servers"][$i]["auth_type"] = "cookie";
$cfg["Servers"][$i]["host"] = "localhost";
$cfg["Servers"][$i]["compress"] = false;
$cfg["Servers"][$i]["AllowNoPassword"] = false;
$cfg["UploadDir"] = "";
$cfg["SaveDir"] = "";
$cfg["TempDir"] = "/var/lib/phpmyadmin/tmp";
'
echo -e "$phpmyadmin_config" >> /usr/share/phpmyadmin/config.inc.php

何が間違っているのか教えてください。

答え1

このようにシェルを使ってここ - ドキュメント:

cat<<EOF1 > /usr/share/phpmyadmin/config.inc.php
<?php
declare(strict_types=1);
\$cfg["blowfish_secret"] = "$(openssl rand -base64 50 | tr -d '\n')";
EOF1

cat<<'EOF2' >> /usr/share/phpmyadmin/config.inc.php
$i = 0;
$i++;
$cfg["Servers"][$i]["auth_type"] = "cookie";
$cfg["Servers"][$i]["host"] = "localhost";
$cfg["Servers"][$i]["compress"] = false;
$cfg["Servers"][$i]["AllowNoPassword"] = false;
$cfg["UploadDir"] = "";
$cfg["SaveDir"] = "";
$cfg["TempDir"] = "/var/lib/phpmyadmin/tmp";
EOF2

一重引用符内に変数を拡張することはできません。

シェルから正しく引用する方法を学ぶことは非常に重要です。

スペース/メタ文字を含むすべてのリテラルは「二重引用符」として扱われます。すべて拡張:"$var"、、、、。"$(command "$var")"​コードやテキストについてはを参照してください。"${array[@]}""a & b"'single quotes'$'s: 'Costs $5 US'ssh host 'echo "$HOSTNAME"'
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words

関連情報