Answers:
可以使用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"
一行完成。
这是将变量传递给sh -c
(作为位置参数)的另一种方法:
{
VAR="world"
VAR2='!'
sh -c 'echo "Hello ${0}${1}"' "$VAR" "$VAR2"
}
$@
按预期方式工作,例如。sh -c 'echo "Hello $@"' _ "$VAR" "$VAR2"
`
$0
会在shell的错误/警告消息中显示。
如果您不想将它们导出为环境变量,则可以采取以下技巧。将您的variabe定义保存到文件,.var_init.sh
并像下面这样在子shell中提供它:
.var_init.sh
VAR="Test"
从命令行:
sh -c ". .var_init.sh && echo \$VAR" # Make sure to properly escape the '$'
这样,您仅在子shell执行时设置变量。
ENV=.var_ini.sh sh -c '...'
.var_init.sh
预计将在当前目录中寻找(与$PATH
),它应该写成. ./var_init.sh