在bash中使用variablesheredoc
我试图插入一个bash heredoc里面的variables:
var=$1 sudo tee "/path/to/outfile" > /dev/null << "EOF" Some text that contains my $var EOF 这不工作,因为我所期望的($ var是字面上处理,不扩大)。
我需要使用sudo tee,因为创build文件需要sudo。 做的事情如:
 sudo cat > /path/to/outfile <<EOT my text... EOT 
不起作用,因为> outfile在当前shell中打开文件,而不是使用sudo。
在回答你的第一个问题时,没有参数replace,因为你已经把分隔符放在了引号中 – bash手册说 :
这里的文件格式是:
<<[-]word here-document delimiter对字执行参数扩展,命令replace,算术扩展或path名扩展。 如果单词中的任何字符被引用,则分隔符是对单词的引用删除的结果,并且这里的文档中的行不被扩展。 如果单词不加引号,那么这里的文档的所有行都要进行参数扩展,命令replace和算术扩展。 […]
 如果你改变你的第一个例子使用<<EOF而不是<< "EOF"你会发现它的工作原理。 
 在第二个示例中,shell仅使用参数cat调用sudo ,并且redirect适用于作为原始用户的sudo cat的输出。 它会工作,如果你尝试: 
 sudo sh -c "cat > /path/to/outfile" <<EOT my text... EOT 
 不要使用带<<EOF引号: 
 var=$1 sudo tee "/path/to/outfile" > /dev/null <<EOF Some text that contains my $var EOF 
variables扩展是here-docs中的默认行为。 您可以通过引用标签(使用单引号或双引号)来禁用该行为。