【发布时间】:2019-03-05 05:44:56
【问题描述】:
我正在尝试在 bash heredoc 中插入变量:
var=$1
sudo tee "/path/to/outfile" > /dev/null << "EOF"
Some text that contains my $var
EOF
这并没有像我预期的那样工作($var 是按字面意思处理的,而不是扩展的)。
我需要使用sudo tee,因为创建文件需要 sudo。做类似的事情:
sudo cat > /path/to/outfile <<EOT
my text...
EOT
不起作用,因为>outfile 在当前 shell 中打开文件,而不是使用 sudo。
【问题讨论】:
-
这是一个可以理解的混淆!如下所述,引用分隔符的任何部分会关闭heredoc 中的扩展(就像它在
''中一样),但not 引用分隔符会打开扩展(就像它在@987654328 中一样@)。 但是, 您的直觉在 Perl 中是正确的,其中带有单引号标识符的heredoc 的行为就像它在单引号中一样,带有双引号标识符的一个就像在双引号中一样,一个带有返回-ticked 标识符,就像在反引号中一样!见:perlop: <<EOF