Ich versuche, Variablen innerhalb eines Bash-Heredocs zu interpolieren:
var=$1
sudo tee "/path/to/outfile" > /dev/null << "EOF"
Some text that contains my $var
EOF
Dies funktioniert nicht wie erwartet ( $var
wird wörtlich behandelt, nicht erweitert).
Ich muss verwenden, sudo tee
weil das Erstellen der Datei sudo erfordert. So etwas tun wie:
sudo cat > /path/to/outfile <<EOT
my text...
EOT
Funktioniert nicht, da >outfile
die Datei in der aktuellen Shell geöffnet wird, die kein sudo verwendet.
''
), aber nicht das Zitieren des Trennzeichens aktiviert die Erweiterung (als ob es in wäre""
). Allerdings ist Ihre Intuition richtig in Perl, wo ein heredoc mit einfachen Anführungszeichen Kennung verhält sich , als ob es in einfachen Anführungszeichen waren, eines mit einer doppelten Anführungszeichen Kennung , als ob in doppelten Anführungszeichen, und ein mit Rück tickte Kennung , als ob in Backticks ! Siehe: Perlop: << EOF