シェルは変数展開を実行し、シェルはコマンド置換を実行しますが、それは再帰的にそれらを行いません。
変数展開の結果はいずれにもさらされないますさらに変数展開またはコマンド置換。
コマンド置換の結果はないは、任意のさらなる可変膨張又はコマンド置換に供されます。
これは再帰的に行われた場合、予期しない結果とセキュリティ問題がすべて発生するため、これは良いことです。
1つの解決策は、eval
を使用することです。これは一般的に危険なアプローチであり、a last resort.
としてください。安全な解決策は、あなたが望むものを再考することです。特に、hostname
はいつ評価されますか? site
ファイルが作成される前に評価する必要がありますか?または、コードが最終的に実行されたときに評価する必要がありますか?後者はあなたが望むものであるように見えます。
この場合、この方法を検討してください。あなたがsite
ファイルを読み込む場合は、ホスト名に置換するprintf
を使用し、
$ cat site
http://%s/main.html
:あなたは、ホスト名に行きたいsite
ファイルに%s
を入れ
$ mysite=$(printf "$(cat site)" "$(hostname)")
$ echo "$mysite"
http://artur/main.html
はbashで、代替
$ printf -v mysite "$(< site)" "$HOSTNAME"
$ echo "$mysite"
http://artur/main.html
'$(cat site)'は '$(