Mat*_*oli 30 shell scripting shell-script variable
我运行以下脚本:
VAR="Test"
sh -c 'echo "Hello $VAR"'
Run Code Online (Sandbox Code Playgroud)
但我得到:
# ./test.sh
Hello
Run Code Online (Sandbox Code Playgroud)
如何将VAR
我的脚本变量发送到使用sh -c '...'
.
Ign*_*ams 49
要么用于export
将其转换为环境变量,要么将其直接传递给命令。
VAR="Test" sh -c 'echo "Hello $VAR"'
VAR="Test"
export VAR
sh -c 'echo "Hello $VAR"'
Run Code Online (Sandbox Code Playgroud)
避免在 shell 代码周围使用双引号以允许插值,因为这会引入命令注入漏洞,例如:
sh -c " echo '你好 $VAR' "
如果在$VAR
包含类似内容时调用,则会导致重新启动';reboot #
小智 11
这是将变量传递给sh -c
(作为位置参数)的另一种方法:
{
VAR="world"
VAR2='!'
sh -c 'echo "Hello ${0}${1}"' "$VAR" "$VAR2"
}
Run Code Online (Sandbox Code Playgroud)
如果您不想将它们导出为环境变量,那么您可以使用以下技巧。将您的变量定义保存到一个文件中.var_init.sh
,并在您的子 shell 中提供它,如下所示:
.var_init.sh
VAR="Test"
Run Code Online (Sandbox Code Playgroud)
从命令行:
sh -c ". .var_init.sh && echo \$VAR" # Make sure to properly escape the '$'
Run Code Online (Sandbox Code Playgroud)
这样,您只需在执行子 shell 时设置变量。