bash 和 php-cli 之间的变量

use*_*595 2 php variables bash export environment-variables

我想在 1 个脚本中将变量从 bash 传递到 php。我知道 php 中可以有 2 个文件和 $argv,但我真的很想将脚本放在 1 个文件中。这就是我现在得到的:

#!/bin/bash
echo "This is bash"
export VAR="blabla"

/usr/bin/php << EOF
<?php

echo getenv("VAR");

?>
EOF
Run Code Online (Sandbox Code Playgroud)

效果很好。但有一个问题:我似乎无法将 getenv 存储在变量中。

#!/bin/bash
echo "This is bash"
export VAR="blabla"

/usr/bin/php << EOF
<?php

$var = getenv("VAR");
echo $var;

?>
EOF
Run Code Online (Sandbox Code Playgroud)

给我这个错误: PHP 解析错误:语法错误,意外的 '=' in - on line 3

如果我尝试定义像 $var = "hello"; 这样的基本变量,我也会得到同样的错误。

mu *_*ort 5

您的问题是 bash 和 php 都使用美元符号作为变量。当你在heredoc中这样说时:

$var = getenv("VAR");
Run Code Online (Sandbox Code Playgroud)

bash 尝试替换$var为 shell 变量的值var,但该变量可能为空;结果是 PHP 看到这样的东西:

<?php

= getenv("VAR");
echo ;

?>
Run Code Online (Sandbox Code Playgroud)

因此出现“意外的'='”错误。

尝试在 PHP 中转义美元符号:

#!/bin/bash
echo "This is bash"
export VAR="blabla"

/usr/bin/php << EOF
<?php

\$var = getenv("VAR");
echo \$var;

?>
EOF
Run Code Online (Sandbox Code Playgroud)

bash 定界文档评估变量就像双引号字符串一样。