回答:
を使用export
して環境変数に変換するか、コマンドに直接渡します。
VAR="Test" sh -c 'echo "Hello $VAR"'
VAR="Test"
export VAR
sh -c 'echo "Hello $VAR"'
次のようなコマンドインジェクションの脆弱性が生じるため、シェルコードを二重引用符で囲まないようにしてください。
sh -c "echo 'Hello $ VAR'"
の$VAR
ようなものが含まれているときに呼び出された場合、再起動を引き起こす';reboot #
export var="Test"
、1行で行うこともできます。
sh -c
(位置引数として)変数を渡す別の方法は次のとおりです。
{
VAR="world"
VAR2='!'
sh -c 'echo "Hello ${0}${1}"' "$VAR" "$VAR2"
}
$@
、期待どおりに機能します。sh -c 'echo "Hello $@"' _ "$VAR" "$VAR2"
`
$0
ます。これは、シェルによってエラー/警告メッセージに表示されるためです。
それらを環境変数としてエクスポートしたくない場合は、ここで行うことができますトリックです。variabe定義をファイルに保存し、サブシェルで次の.var_init.sh
ようにソースします。
.var_init.sh
VAR="Test"
コマンドラインから:
sh -c ". .var_init.sh && echo \$VAR" # Make sure to properly escape the '$'
この方法では、サブシェルの実行時にのみ変数を設定します。
ENV=.var_ini.sh sh -c '...'
.var_init.sh
現在のディレクトリ(とは対照的に、中を探したことが期待されている$PATH
)、それが書かれるべき. ./var_init.sh