Tôi đang cố gắng để suy biến bên trong một heredoc bash:Sử dụng các biến bên trong một heredoc bash
var=$1
sudo tee "/path/to/outfile" > /dev/null << "EOF"
Some text that contains my $var
EOF
này không làm việc như tôi mong đợi ($ var được xử lý theo nghĩa đen, không mở rộng).
Tôi cần sử dụng sudo tee vì việc tạo tệp yêu cầu sudo. Làm một cái gì đó như:
sudo cat > /path/to/outfile <<EOT
my text...
EOT
Không hoạt động, bởi vì> tệp mở ra tệp hiện tại, không sử dụng sudo.
Đây là một sự nhầm lẫn dễ hiểu! Như đã lưu ý dưới đây, trích dẫn bất kỳ phần nào của dấu phân cách tắt mở rộng trong heredoc (như thể nó nằm trong ''''), nhưng * không * trích dẫn dấu tách mở rộng (như thể nó nằm trong '" "'). * Tuy nhiên, * trực giác của bạn là chính xác trong Perl, nơi một heredoc với định danh đơn được định nghĩa giống như trong dấu nháy đơn, một với một mã định danh kép được trích dẫn như trong dấu ngoặc kép và một với mã nhận dạng được đánh dấu sau nếu trong backticks! Xem: [perlop: << EOF] (http://perldoc.perl.org/perlop.html#%3c%3cEOF) –