【问题标题】:Variables between bash and php-clibash 和 php-cli 之间的变量
【发布时间】:2011-08-21 21:21:07
【问题描述】:

我想在 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

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

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

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

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

?>
EOF

给我这个错误:PHP Parse error: syntax error, unexpected '=' in - on line 3

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

【问题讨论】:

    标签: php bash variables export environment-variables


    【解决方案1】:

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

    $var = getenv("VAR");
    

    bash 试图将$var 替换为shell 变量var 的值,这可能是空的;结果是 PHP 看到的是这样的:

    <?php
    
    = getenv("VAR");
    echo ;
    
    ?>
    

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

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

    #!/bin/bash
    echo "This is bash"
    export VAR="blabla"
    
    /usr/bin/php << EOF
    <?php
    
    \$var = getenv("VAR");
    echo \$var;
    
    ?>
    EOF
    

    bash heredoc 像双引号字符串一样评估变量。

    【讨论】:

      【解决方案2】:

      如果您阻止 shell 解释 PHP 脚本,请为您的此处文档引用分隔符:

      /usr/bin/php << 'EOF'
      <?php $var = getenv("VAR"); echo $var; ?>
      EOF
      

      【讨论】:

      • 是的,我认为这是最简单的解决方案。谢谢!
      【解决方案3】:

      您遇到了一个与您想要解决问题的方式相关的陷阱,即将两个脚本放在一个文件中,一个用于 Bash,另一个用于 PHP。问题是 $var 由 shell 解释,将 PHP 留下 = getenv("VAR"); 在预期的语句,因此语法错误。

      另一件事是,只要将两个脚本都保存在一个文件中,就不需要从 env 中提取 VAR(我认为这是一个坏主意)。

      你可以这样做(未测试):

      #!/bin/bash
      echo "This is bash"
      VAR="blabla" # normal variable, no need to export
      
      /usr/bin/php << EOF
      <?php
      \$var = "$VAR"; # access variable
      echo \$var;
      EOF
      

      【讨论】:

        【解决方案4】:

        为什么不使用STDIN

        echo lala.txt | php -r '$line = trim(fgets(STDIN))if(is_file($line)){echo "1";}else{echo "0";}'

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-28
          • 2019-08-03
          • 1970-01-01
          • 1970-01-01
          • 2014-03-07
          • 1970-01-01
          • 2011-09-22
          相关资源
          最近更新 更多