在 bash 中将多行文本回显到文件中?

在 bash 中将多行文本回显到文件中?

我该怎么写:

$count = mysql_num_rows($result);
print "<h3>$count metal prices available</h3>";

到文件 index.php?

我试过了:

echo "$count = mysql_num_rows($result);
print "<h3>$count metal prices available</h3>";" > index.php

但我不明白如何转义输入中的双引号。

除了 echo 之外,使用其他工具是否更好?如果可能的话,我宁愿不重写整个 PHP 脚本(它比示例中给出的 2 行要长!)。

答案1

有几种方法可以实现这一点:

 cat >index.php <<'EOT'
 $count = mysql_num_rows($result);
 print "<h3>$count metal prices available</h3>";
 EOT

或者

 echo '$count = mysql_num_rows($result);
 print "<h3>$count metal prices available</h3>";' > index.php

或者

 echo '$count = mysql_num_rows($result);' >index.php  # overwrites file if it already exists
 echo 'print "<h3>$count metal prices available</h3>";' >>index.php  # appends to file

还有更多可能的方法 - 以此作为测试事物的起点......

答案2

在 bash 中,您需要做的就是将外面的引号替换为单引号:

echo '$count = mysql_num_rows($result);                                                                  
print "<h3>$count metal prices available</h3>";' > index.php

如果您需要做更复杂的事情,您可以使用“>>”多次回显,它会附加而不是覆盖:

echo '$count = mysql_num_rows($result);' >> index.php
echo 'print "<h3>$count metal prices available</h3>";' >> index.php

答案3

我的脚本将多行保存到.csv文件中:

#! /bin/bash
while [ 1 ]
do
    sleep 1s
    str="\""$(date)"\""
    echo   ${str} >>333.csv
    
    # begin add next row
    echo ",\"" >>333.csv
    # append multiline result
    ps >>333.csv
    # end add next row
    echo "\"" >>333.csv
    
    # begin add next row
    echo ",\"" >>333.csv
    # append multiline result
    df -h >>333.csv
    # end add next row
    echo "\"" >>333.csv
    
    sed -i ":a;N;s/\"\n\,/\"\,/g;ta" ./333.csv
done

相关内容